明确的概念专业化
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>
我正在尝试使用概念对某些模板方法进行显式特化,但它不是在 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>