我在这个C++ 11代码上遇到编译错误,但我不知道为什么.这是代码:
#include <condition_variable>
class NonCopiableClass
{
    std::condition_variable condition_;
};
struct NonCopiableStruct
{
    std::condition_variable condition_;
};
class Test
{
 public:
    Test() : 
        myClass{},
        myStruct{}
    {};
 private:
    NonCopiableClass myClass;
    NonCopiableStruct myStruct;
};
Visual Studio 2015失败,出现以下错误:
错误C2280:'std :: condition_variable :: condition_variable(const std :: condition_variable&)':尝试引用已删除的函数1> c:\ program files(x86)\ microsoft visual studio 14.0\vc\include\mutex(550 ):注意:请参阅'std :: condition_variable :: condition_variable'的声明.
如果我更改Test constructor为不使用C++ 11统一初始化Struct它编译好了.
Test() : 
        myClass{},
        myStruct() // <--- CHANGE
    {};
我没有得到为什么Struct类型使用复制构造函数,但Class似乎没问题.只有Struct拥有不可复制的成员才会发生这种情况.
我还注意到,如果我初始化成员初始化列表的Struct外部Test …