C++20 概念:Gnu C++ 中的错误?

问题描述 投票:0回答:0

我有一个奇怪的 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>;

这是编译器的已知错误还是我遗漏了什么?

c++ g++ c++20 c++-concepts
© www.soinside.com 2019 - 2024. All rights reserved.