我正在尝试使用typetraits enable_if
,但我的语法很麻烦......
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <type_traits>
template <typename _T, typename = std::enable_if_t<std::is_floating_point<_T>::value> >
struct Point {
_T x;
_T y;
Point();
};
template <typename _T, typename = std::enable_if_t<std::is_floating_point<_T>::value> >
inline Point<_T, std::enable_if_t<std::is_floating_point<_T>::value> >::Point()
{
this->x = (_T)0.0;
this->y = (_T)0.0;
}
错误是:
1>c:\users\lukkio\documents\visual studio 2015\projects\templates\templates\templates\header.h(19): error C3860: template argument list following class template name must list parameters in the order used in template parameter list
我在Windows上使用visual studio 2015。是不是以某种方式与SFINAE有关?如何修复我的代码?
答案 0 :(得分:2)
正如您可以在默认模板参数http://en.cppreference.com/w/cpp/language/template_parameters#Default_template_arguments下阅读的那样,默认模板参数不应该指定两次,所以如果你在构造函数中删除typename = .....之后的部分,我相信它应该工作