Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可选<;T>;实现-禁用可选(U&;)构造函数_C++_C++11 - Fatal编程技术网

C++ 可选<;T>;实现-禁用可选(U&;)构造函数

C++ 可选<;T>;实现-禁用可选(U&;)构造函数,c++,c++11,C++,C++11,我正在处理一个可选的类,因为我使用的是c++11,而编译器没有提供实现。我对右值引用构造函数有问题。以下构造函数似乎工作正常 Optional(); Optional(const ThisType& other); Optional(ThisType&& other); template <typename U> Optional(const Optional<U>& other); template <typename U>

我正在处理一个
可选的
类,因为我使用的是c++11,而编译器没有提供实现。我对右值引用构造函数有问题。以下构造函数似乎工作正常

Optional();

Optional(const ThisType& other);
Optional(ThisType&& other);

template <typename U>
Optional(const Optional<U>& other);
template <typename U>
Optional(Optional<U>&& other);

template <typename... Args>
explicit Optional(Unused, Args&&... args);
template <typename U, typename... Args>
explicit Optional(Unused, InitializerList<U> initList, Args&&... args);

template <typename U>
Optional(const U& value);
则以下测试用例不起作用:

// Optional<T>(const Optional<T>&)
Opt o(Unused{});
Opt o2 = o;
编辑


可以将以下代码复制粘贴到文件中。我正在使用VS2013,我仔细检查了这个版本是否调用了正确的构造函数。有4行注释
请提供MCVE:请注意,如果您想支持(比如)包含
const
成员的类,那么在C++11中实现“可选”类型可能会很困难。@KerrekSB是的,这是真的,但我会自己使用它-大多数时间是简单类型。然而,这个问题似乎更“一般”。我想,enable_if是关键,但我没有正确地应用它。我不得不将实现添加到“MCVE”中,因为没有它,代码就可以编译。
// Optional<T>(const Optional<T>&)
Opt o(Unused{});
Opt o2 = o;
template <typename U, typename = typename EnableIf<!IsSame<DecayT<U>, Optional<U>>::Value>::Type>
Optional(U&& value);