编码:
template<typename T>
class Foo;
template<typename T>
constexpr auto operator==(const Foo<T>& lhs, const Foo<T>& rhs) -> bool;
template<typename T>
class Foo
{
public:
friend constexpr auto operator==<T>(const Foo<T>&, const Foo<T>&) -> bool;
};
在这种情况下,我需要在朋友声明中指定 constexpr 吗?在标准中找到了这个:
当友元声明引用函数模板的特化时,函数参数声明不应包含默认参数,也不应在此类声明中使用 inline、constexpr 或 consteval 说明符。
但是,在同一个 cppreference 上,您可以找到带有的示例friend constexpr bool operator..
,因此我不确定我是否正确理解了上述标准摘录。
在这种情况下,在 C++11 中,您不能只使用
inline
说明符,但constexpr
可以。问题中的引用是指第 20 或第 23 标准。