enable_if
函数的第一个参数时,是否应该将 true_type
值视为 true
值呢?因为 true_type
实际上是 std::integral_constant<bool, true>
,而 integral_constant
定义了类型转换函数 operator value_type
。以下是最简单的测试代码:
#include <type_traits>
template <typename T>
std::enable_if_t<std::is_pod<T>{}>
test(T)
{
}
int main()
{
test(true);
}
这被GCC和Clang所接受,但被MSVC(直到Visual Studio 2019 v16.3.1)所拒绝。
std::enable_if_t<(std::is_pod<T>{})>
可以工作。 - Evg