3
#include <type_traits>
template <int> struct II { };
template < const int& > struct RR { };
template < template <auto> typename Class, typename Type > struct Check : std::false_type { };
template < template <auto> typename Class, auto NonTypes > struct Check<Class,Class<NonTypes>> : std::true_type { };
constexpr int TEN = 10;
constexpr const int& REF = TEN;
static_assert(Check<II,II<TEN>>::value); // passes
static_assert(Check<RR,RR<REF>>::value); // FAILS!?
我用gcc-7.0.1和here就是活生生的例子。問題是如果這是一個編譯器錯誤或者我做錯了什麼?
只是我的猜測:一個普通的'auto'(來自'NonTypes')不能推導出一個引用類型,該類型可以匹配'Class'下推演的const const&'(至少它可以與'const auto&NonTypes' ) –
@PiotrSkotnicki那麼它會適用於'decltype(auto)'嗎? – user975989
@ user975989我認爲匹配一個模板專業化可以歸結爲推導出一個發明的函數模板的類型,其中'decltype(auto)'是沒有用的 –