2015-04-07 1 views
0

в соответствии с cppreferenceпредупреждение не выдается на устаревшей beheavior в C++ 11

генерации неявно определенного конструктора копирования является устаревшим, если Т имеет определенный пользователем деструктор или определенную пользователем копию оператор назначения.

, но следующий код, не предупреждающее сообщение не выдается с использованием лязг ++ и C++

struct CAT 
{ 
    CAT(){cout<<"CAT()"<<endl;} 
    ~CAT(){} 
}; 

int main() 
{ 
    CAT c1, c2; 
    CAT c3(c1); //should print out a warning? 
} 

clang++-3.6 -W -Wall -Wextra -pedantic -O2 -o m main.cpp -pedantic-errors -std=c++14 

ли это ожидаемое поведение г ++ и лязг ++?

ответ

1

лязг ++ имеет следующее предупреждение:

main.cpp:6:5: warning: definition of implicit copy constructor for 'CAT' is deprecated because it has a user-declared destructor [-Wdeprecated] 
    ~CAT(){} 
    ^
main.cpp:12:9: note: implicit copy constructor for 'CAT' first required here 
    CAT c3(c1); //should print out a warning? 
     ^
1 warning generated. 

демо: http://coliru.stacked-crooked.com/a/d6b31ce2d56fac5a

+0

Я запускать команду в Ubuntu лязгом ++/г ++ -Wdeprecated -o тест -std = C++ 14 -O3 -pedantic-ошибки основной .cpp (clang ++ 3.6, g ++ 4.8.2), но предупреждения нет. – camino

Смежные вопросы