私はC++でメタプログラミングについて学んでいます。私はタイプの要素を持つクラスA
を設計しています。ここで、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++14
とgcc(Homebrew gcc 5.3.0)5.3.0でコンパイルしています。
SFINAEの一部を除いて、あなたは 'static_assert'でより良いエラーメッセージを表示します。 – Jarod42