заставить его посчитать это выражение?
main.cpp:37:9: error: no type named ‘type’ in ‘struct enable_if’
int foo() { return this->b+2; }
class Foo
{
public:
const int b = 1;
};
template<class U>
class Bar : public U
{
public:
template<typename enable_if<is_const<decltype(U::b)> == true>::type* = nullptr>
int foo() { return this->b+1; }
template<typename enable_if<is_const<decltype(U::b)> == false>::type* = nullptr>
int foo() { return this->b+2; }
};
int main()
{
Bar<Foo> x;
std::cout<<"Hello World" << x.foo();
return 0;
}
Здесь enable_if инстанцируется в момент инстанциации класса, а не выбора перегрузки. Это происходит из-за того, что U - параметр шаблона класса, а не функции. Решение: template <typename T = U, typename enable_if...> (с использованием T - фиктивного доп. параметра)
Обсуждают сегодня