Можно создать дубликат:
How to use enable_if to enable member functions based on template parameter of classповышение :: enable_if_c не похоже на работу
У меня есть шаблон класса:
template<typename T, size_t N> class Vector
Я хочу, чтобы включить конструкторы для конкретных N
, поэтому сделаю:
Vector(typename boost::enable_if_c<N==2, T>::type const &e0, T const &e1) {
data[0] = e0;
data[1] = e1;
}
Но компилятор (MSVC 2010 SP1) дает мне ошибку вместо применения SFINAE. Ошибка:
error C2039: 'type' : is not a member of 'boost::enable_if_c<B,T>'
with
[
B=false,
T=float
]
В чем проблема? Это известная проблема? Как я могу это исправить? Это единственное решение для использования static_assert
?
Edit: НКУ не удается либо: http://ideone.com/7Ejo8
Можете ли вы опубликовать SSCE на ideone (и показать, что он скомпилирован успешно на gcc)? –
@Ben Voigt: GCC тоже не скомпилирует его. –
@ Vlad Lazarenko: Но там не очень хорошо описано, как это исправить. –