对于c ++ 11中弃用的beheavior没有给出警告

时间:2015-04-07 02:43:25

标签: c++11 g++ clang++

根据cppreference

  

隐式定义的复制构造函数的生成是   如果T具有用户定义的析构函数或用户定义的副本,则不推荐使用   赋值运算符。

但是下面的代码,没有使用clang ++和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

是g ++和clang ++的预期行为吗?

1 个答案:

答案 0 :(得分:1)

clang ++有这个警告:

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