我正在尝试在折叠表达式中使用任意函数,当我发现以下代码可以gcc
用clang
.
enum Enum {
A = 3,
B = 8,
C = 5
};
namespace EnumMax {
constexpr Enum operator>>=(const Enum left, const Enum right) {
return left < right ? right : left;
}
}
template<Enum ... enums>
constexpr Enum max() {
using EnumMax::operator>>=;
return (enums >>= ...);
}
constexpr Enum max_v = max<A, B, C>();
似乎clang
没有考虑重载运算符,而是尝试>>=
在折叠表达式中使用正则运算符。
但是,如果改为拼写折叠表达式,clang
则考虑重载运算符并且编译得很好:
constexpr Enum maxExplicit() {
using EnumMax::operator>>=;
return (A >>= (B >>= C));
}
这是一个clang
错误吗?或者折叠表达式的拼写等价不完全等价?