从 gcc 6.1 升级到 7.1 后,我的一些代码不再编译:
include\jw\vector2.h: In member function 'constexpr jw::vector2<T>& jw::vector2<T>::operator=(const jw::vector2<U>&)':
include\jw\vector2.h(32,119): error : expected primary-expression before '>' token
template <typename U> constexpr vector2& operator=(const vector2<U>& rhs) noexcept { return *this = rhs.cast<T>(); };
^
include\jw\vector2.h(32,121): error : expected primary-expression before ')' token
template <typename U> constexpr vector2& operator=(const vector2<U>& rhs) noexcept { return *this = rhs.cast<T>(); };
^
我在使用模板函数的各种类中遇到了大约 20 个这样的错误。在这种情况下vector2
是一个简单的模板类,定义为:
template <typename T> struct vector2
{ /* ... */ }
是的cast
成员函数vector2
,定义为:
template <typename U> constexpr vector2<U> cast() const noexcept
{
return vector2<U>{ std::is_integral<U>::value ? this->rounded() : *this };
}
坦率地说,我在这里看不到问题,错误消息也没有指出任何明显的问题。任何想法为什么这突然失败?