以下のコードは問題ありません。
template <class T>
std::enable_if<std::is_atomic<T>::value, bool>
foo(T t) { return true; }
template <class T>
std::enable_if<tmp::is_sequence<T>::value, bool>
foo(T t) { return false; }
int main(void){
foo(1); // return true
auto std::vector<int> a{2};
foo(a); // return false
}
しかし、クラスを使用してそれらをバンドルすると、コンパイルできません:
template <class T>
class test {
public:
std::enable_if<std::is_atomic<T>::value, bool>
foo(T t) { return true; }
std::enable_if<tmp::is_sequence<T>::value, bool>
foo(T t) { return false; }
};
int main(...) {
test<int> obj;
obj.foo(1);
test<std::vector<int>> obj2;
std::vector<int> tmp{2};
obj2.foo(tmp);
}
クラン++印刷:
error: functions that differ only in their return type cannot be overloaded
だから私はコンパイラをだますために何かを書きます(2番目にSを追加しますfoo
):
template <class S>
std::enable_if<tmp::is_sequence<T>::value, bool>
foo(T t) { return false; }
それはまだ動作しません:
error: no type named 'type' in 'std::enable_if<false, bool>'
クラスで機能させるにはどうすればよいですか?