gpt4 book ai didi

c++ - 尾随返回类型中 SFINAE 的 GCC 错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:35:39 25 4
gpt4 key购买 nike

在我下面的代码中,我的意图是定义 Weighted<T>::operator+=仅当模板参数 Toperator+=operator*= .它在 MSVC14 上运行良好,但 GCC(使用 6.3.0 测试)失败并在指定位置出现错误“'operator*='不匹配”(当 T 没有 operator*= 时)。

template<typename T>
struct Weighted {
double weight;
T value;

// ...

// weighted mean
template<typename U=T>
auto operator+=(const Weighted<U>& other) -> decltype(value += other.value, value*=1.0, *this) {
// ***COMPILE ERROR*** ----------------------------------------------------> ~~~~~^~~~~

value *= weight;
value += other.weight*other.value;
weight += other.weight;
value /= weight;
return *this;
}

// scale weight
Weighted<T>& operator*=(double multiplier) {
weight *= multiplier;
return *this;
}
};

我应该怎么做?如果问题出在编译器的版本上,是否有一种简单的解决方法可以避免升级编译器?

最佳答案

template<typename U=T, typename = std::enable_if_t<std::is_same<U,T>::value>>
auto operator+=(const Weighted<U>& other) -> decltype(value += other.value, std::declval<U&>()*=1.0, *this) {
// ...
}

还在第一行添加了一个检查以限制 UT 相同。

关于c++ - 尾随返回类型中 SFINAE 的 GCC 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56489714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com