Похоже, это ошибка в MSVC10?
#include <type_traits>
template<int j>
struct A{
template<int i>
typename std::enable_if<i==j>::type
t(){}
};
int main(){
A<1>().t<1>(); //error C2770
}
ошибка C2770: неверный явный аргумент(ы) template_or_generic "enable_if::type A::t(void)".
Компилируется следующее:
#include <type_traits>
template<class j>
struct A{
template<class i>
typename std::enable_if<std::is_same<i,j>::value>::type
t(){}
};
template<unsigned int j>
struct B{
template<unsigned int i>
typename std::enable_if<i==j>::type
t(){}
};
int main(){
A<int>().t<int>();
B<1>().t<1>();
}
#include <type_traits>
иusing std::enable_if
? - person kennytm   schedule 16.12.2011unsigned int
или дажеlong
. Это может быть приемлемым решением для вас. - person Praetorian   schedule 16.12.2011<typetraits>
. Должно быть<type_traits>
- person Nawaz   schedule 16.12.2011char
,bool
,size_t
илиlong
и работает для int, не равного 0 или 1! (ну я проверил на 2). См. stackoverflow.com/questions/2763836/ для связанной проблемы. - person TemplateRex   schedule 21.07.2012