我想實現一個基本的模板元編程結構,該結構使用std::is_same
來確定類型列表是否全部相同。我試圖執行它,如下所示:瞭解爲什麼編譯時布爾代數不起作用
template <typename T, typename U, typename... Args>
struct check_same {
static const bool value = std::is_same<T, U>::value && check_same<U, Args...>::value;
};
template <typename T, typename U>
struct check_same {
static const bool value = std::is_same<T, U>::value;
};
但是,如果我嘗試實例check_same
我得到以下編譯器錯誤:
'check_same' : too few template arguments
這是爲什麼不進行編譯時布爾的有效方法代數?當然,由於涉及的所有表達式都是constexpr
(或const
,因爲MSVC尚未實現constexpr
),它應該編譯?
下面將無法被編譯:在C++
int main()
{
static_assert(check_same<int, unsigned int, float>::value, "Types must be the same");
return 0;
}
您缺少'value'類型。不知道這與你的錯誤有什麼關係。 – chris
[看到這個答案是一個偉大的'are_same'實現](http://stackoverflow.com/a/24687161/701092) – 0x499602D2
「太少的模板參數」,因爲通過這個遞歸,args消耗到0,並且沒有check_same < >少於2個強制性參數。 – Solkar