我有一个奇怪的 GNU C++ 版本行为。 12.2.1。以下程序编译无误:
#include<iostream>
using namespace std;
template<class T>
concept Addable = requires(T a, T b)
{
{a+b} -> std::same_as<T>;
};
template<Addable T>
T sum(T a, T b)
{
return a+b;
};
int main()
{
}
g++ concepts.cpp -std=c++20
不报错。
但是去掉第一行(#include<iostream>
)时,报如下错误:
9 | {a+b} -> std::same_as<T>;
| ^~~~~~~
concepts.cpp:9:24: error: expected primary-expression before ‘<’ token
9 | {a+b} -> std::same_as<T>;
| ^
concepts.cpp:9:26: error: expected primary-expression before ‘>’ token
9 | {a+b} -> std::same_as<T>;
| ^
concepts.cpp:9:27: error: expected primary-expression before ‘;’ token
9 | {a+b} -> std::same_as<T>;
这是编译器的已知错误还是我遗漏了什么?