可能重复:
enable_if 迭代器作为默认模板参数?
我正在寻找在编译时知道是否std::iterator_traits<T>::value_type
有效和定义的解决方案。问题在于 std 库将 value_type 的声明转发到 T 中的派生类型:
typedef T::value_type value_type;
我需要在编译时知道 T::value_type 是否是有效类型,以避免与 value_type 不存在相关的错误。
请考虑以下示例:
std::iterator_traits<int *>::value_type; // OK - should return that value_type exists as it's defined in specialization of std::iterator_traits
std::iterator_traits<const int *>::value_type; // OK - should return that value_type exists as it's defined in specialization of std::iterator_traits
std::iterator_traits<std::vector<int>::const_iterator> >::value_type; // OK - the value_type exists defined within std::vector<int>::const_iterator
std::iterator_traits<int>::value_type; // ERROR - the value_type is not defined within int class - this is what I'm trying to avoid to resolve the value_type of.
我需要该解决方案完全符合 C++ 标准和标准库标准并且独立于编译器。