如何构建仅算术模板对象?

How can I construct arithmetic-only template objects?

我正在尝试了解有关 C++ 元编程的更多信息。我正在设计 class A,它具有 T 类型的元素,其中 T 是某种算术类型。我怎样才能构造这样一个对象?

这是我的尝试:

#include <iostream>
#include <type_traits>

template <typename T,
          typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type>
struct A {
  A<T>(T t) : t(t) {}
  T t;
};

int main() {
  A<int> a{4}, b{2};
  std::cout << a.t + b.t << '\n';
}

当我尝试编译它时,出现以下错误:

error: expected ')' before 't' A<T>(T t) : t(t) {}

我四处搜索,但错误非常普遍,所以我没有找到解决问题的确切方法。

如果重要的话我正在用 -std=c++14gcc (Homebrew gcc 5.3.0) 5.3.0.

编译

从构造函数中删除 <T>。构造函数不是模板,class 是。

template <typename T,
          typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type>
struct A {
  A(T t) : t(t) {}
  T t;
};