某些模板函数不再在gcc 7中编译

时间:2017-05-04 18:19:45

标签: c++ c++17 gcc7

从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
{ /* ... */ }

castvector2的成员函数,定义为:

template <typename U> constexpr vector2<U> cast() const noexcept 
{ 
    return vector2<U>{ std::is_integral<U>::value ? this->rounded() : *this }; 
}

坦率地说,我在这里看不到问题,错误信息并未指出任何明显的问题。任何想法为什么突然失败?

0 个答案:

没有答案