【发布时间】:2020-09-09 13:23:43
【问题描述】:
我有一个if constexpr 来检查一个类型是否与它自己相等。我用std::is_invocable_v<std::equal_to<>, T, T>。
然而,当T 是一个不可比较结构的向量时,sn-p 会错误地返回 True。是有深层原因还是编译器错误?
下面是最小的例子。
#include <type_traits>
#include <iostream>
#include <vector>
class TNonComparable{};
int main()
{
std::cout << std::is_invocable_v<std::equal_to<>, TNonComparable, TNonComparable> << "\n";
// 0
std::cout << std::is_invocable_v<
std::equal_to<>,
std::vector<TNonComparable>,
std::vector<TNonComparable>
> << "\n";
// 1
std::vector<TNonComparable> vec;
// vec == vec;
// (expected) compilation error
}
我检查了 Godbolt 的输出,所有最新版本的 g++ 和 clang 都是一样的。
【问题讨论】:
标签: c++ templates typetraits