Я хочу использовать std :: enable_if для MyClass, чтобы принимать только (uint32_t | uint64_t) и в то же время, если пользователь не указал какой-либо тип; по умолчанию выбирается в соответствии с условиями ниже.
, но я не могу заставить его работать. (C ++ 17)
#include <vector>
#include <cstdint>
template <typename T=std::conditional_t<sizeof(void*) == 8, std::uint64_t, std::uint32_t>>
class MyClass
{
private:
std::vector<T> vs;
public:
// ...
};
int main(){
MyClass a; // OK, the defaut type is used either uint32_t or uint64_t
MyClass<std::uint32_t> b; // Ok, use the user provided type
MyClass<long> c; // must not compile, T is not one of uint32_t, uint64_t
}