CLang 中的 C++20 概念支持

时间:2021-07-25 15:57:16

标签: c++ clang c++20 c++-concepts

我正在尝试使用 Mac 上的 Clang 编译 cppreference 中某个概念的示例,但失败了。如何解决问题并编译示例?

代码:

setContactInfo({...contactInfo, phoneInputs: [...contactInfo.phoneInputs,phoneInputBox ]});

终端输出:

#include <concepts>
#include <iostream>
 
template<std::regular T>
struct Single {
    T value;
    friend bool operator==(const Single&, const Single&) = default;
};
 
int main()
{
    Single<int> myInt1{4};
    Single<int> myInt2;
    myInt2 = myInt1;
 
    if (myInt1 == myInt2)
        std::cout << "Equal\n";
 
    std::cout << myInt1.value << ' ' << myInt2.value << '\n';
}

编译器版本:

% g++ -std=c++20 -o a a.cpp
a.cpp:4:15: error: no type named 'regular' in namespace 'std'
template<std::regular T>
         ~~~~~^
a.cpp:6:5: error: unknown type name 'T'
    T value;
    ^
a.cpp:12:12: error: template argument for non-type template parameter must be an expression
    Single<int> myInt1{4};
           ^~~
a.cpp:4:23: note: template parameter is declared here
template<std::regular T>
                      ^
a.cpp:13:12: error: template argument for non-type template parameter must be an expression
    Single<int> myInt2;
           ^~~
a.cpp:4:23: note: template parameter is declared here
template<std::regular T>
                      ^
4 errors generated.

有趣的是,该示例在具有较低 CLang 版本 (12.0.1) 的 GodBolt 上成功编译

0 个答案:

没有答案