我一直在搞enable_if,我似乎已經偶然發現了一些不一致的行爲。這是在VS2010中。我已將它縮減爲以下示例。std :: enable_if專業化失敗
#include <type_traits>
using namespace std;
// enable_if in initial template definition
template <class T, class Enable = enable_if<true>> struct foo {};
foo<int> a; //OK
// explicit specialisation
template <class T, class Enable = void> struct bar;
template <class T> struct bar<T, void> {};
bar<int> b; //OK
// enable_if based specialisation
template <class T, class Enable = void> struct baz;
template <class T> struct baz<T, std::enable_if<true>> {};
baz<int> c; //error C2079: 'c' uses undefined struct 'baz<T>'
這是代碼或編譯器中的錯誤嗎?
啊當然。謝謝! – Ayjay
@McNellis:「爲了在條件爲false時獲得替換失敗,您需要使用類型嵌套的typedef,它只在條件爲真時才被定義」......這是否有意義?這意味着你永遠無法讓替代失敗。那是你的意思嗎? –