样本is_copy_asignable实现中的Rvalue引用用法

时间:2017-02-19 11:03:04

标签: c++ c++11 rvalue-reference universal-reference

我正在观看Walter Brown关于CppCon 2014“现代模板元编程:汇编”的演讲。在第二部分中,他使用is_copy_assignable的示例实现演示了decltype和declval的用法。

以下是视频的链接,其中包含幻灯片,显示了源代码(如果您想听听他的解释,请稍后退一步):https://youtu.be/a0FliKwcwXE?t=1576

我在示例程序中输入了他的实现:

#include <iostream>
#include <type_traits>
#include <mutex>

using namespace std;


template <class T>
struct my_is_copy_assignable {
private:
    template<class U, class = decltype(declval<U&>() = declval<U const&>())>
    static true_type try_assignment(U&&);   // Why U&& and not for example U?

    static false_type try_assignment(...);

public:
    using type = decltype( try_assignment( declval<T>() ) );
};


int main()
{
    cout << "Is mutex copy assignable: " 
         << my_is_copy_assignable<mutex>::type() << endl
         << "Is int copy assignable: " 
         << my_is_copy_assignable<int>::type() << endl;

    return 0;
}

我的问题是关于功能模板(注释的):

static true_type try_assignment(U&&);

他为什么使用右值参考?我尝试使用左值参考甚至是按值传递参数,它似乎有效。

我在这里缺少什么?

0 个答案:

没有答案