使用typetraits C ++的错误/错误

时间:2016-03-26 20:28:13

标签: c++ templates sfinae typetraits

我正在尝试使用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有关?如何修复我的代码?

1 个答案:

答案 0 :(得分:2)

正如您可以在默认模板参数http://en.cppreference.com/w/cpp/language/template_parameters#Default_template_arguments下阅读的那样,默认模板参数不应该指定两次,所以如果你在构造函数中删除typename = .....之后的部分,我相信它应该工作