明确的概念专业化

explicit specialization with concepts

我正在尝试使用概念对某些模板方法进行显式特化,但它不是在 gcc or msvc, but can compile on clang 上编译的...谁是对的?

#include <type_traits>

template<typename T> 
concept arithmetic = std::is_arithmetic_v<T> && !std::is_same_v<T, bool>;

template<typename T>
void foo(const T &value, int &result);

template<>
void foo(const arithmetic auto &value, int &result) {

}

显式特化不能包含 const arithmetic auto 隐含的模板参数; Clang 是错误的,也许是因为它忽略了 template<> 并且只是 重载 模板就像你可能想要做的那样。

正确的语法是

template<arithmetic T>
void foo(const T &value, int &result){}

void foo(const arithmetic auto &value, int &result){} 

所以没有 template<>template<arithmetic T>