У меня есть шаблон класса Bird
с логическим параметром шаблона can_fly
. В зависимости от этого значения я хочу включить функцию-член с сигнатурой void fly();
.
Это мой код:
#include <type_traits>
template<bool can_fly>
class Bird {
public:
template<typename void_t = typename std::enable_if<can_fly>::type>
void_t fly() { /* ... */ }
};
int main() {
Bird<true> flyingBird;
flyingBird.fly();
Bird<false> flightlessBird;
return 0;
}
Этот код отлично компилируется в Visual Studio 2015, но GCC жалуется на то, что в третьей строке main
нет "типа с именем 'type' в 'struct std::enable_if'".
Я думал, что тот факт, что в случае false
нет ::type
, был всей сутью SFINAE. Может кто-нибудь объяснить мне, что я сделал неправильно и каков правильный подход?