declval實現:
#include<type_traits>
using namespace std;
template<typename T>
typename add_rvalue_reference<T>::type declval();
declval 通常被用在一些表達式中配合c++11的新關鍵字decltype推導關係。
template<typename T>
typename T&& my();
template<typename T>
typename T my1();
decltype(true ? my<test>(): my<base>()) a;
decltype(true ? my1<test>(): my1<base>()) b;
decltype(true ? my<test&>() : my<base&>()) a1;
decltype(true ? my1<test&>() : my1<base&>()) b1;
<pre name="code" class="cpp"><pre name="code" class="cpp">decltype(true ? my<test&&>() : my<base&&>()) a2;
decltype(true ? my1<test&&>() : my1<base&&>()) b2;
。這個文章,確實存着一些問題,這個declval是用來簡化代碼,所以我給的例子是有一定問題的。
struct base { int test1() { return 1; } };
struct test : base {
private:test() {}; //私有構造函數
public:
int test1(){ return 1; }
};