使用概念启用 class 个模板的成员函数

Enable member functions of class templates using concepts

所以我有一个概念Fooable:

template <typename T>
concept bool Fooable()
{
    return requires(...){ ... };
}

而且我有一个 class 模板 Bar 将类型 T 作为模板参数,我只想在 T 为 [=13] 时启用成员函数=]:

template <typename T>
class Bar
{
public:
    template // ???
        requires Fooable<T>
    void MemFun();
};

C++17 中的概念 TS 或 C++2a 中是否可能?

在 Concepts TS 和 C++20 设计中,函数都有一个可选的尾随 requires-clause。所以你不需要让你的成员函数成为模板来约束它:

void MemFun() requires Fooable<T>;

约束可以在尾随位置的函数之后:

template <typename T>
class Bar
{
public:
    void MemFun() requires Fooable<T>;
};

Live on Godbolt