递归尾随返回类型visual studio 2010

时间:2012-02-03 22:13:07

标签: c++ visual-studio-2010 visual-c++ c++11

我刚刚从2008年升级到vc ++ 2010 express以便使用c ++ 11功能但我在递归重载运算符中使用尾随返回类型时遇到问题。我想采用具有任意数量维度的两个std :: vectors并添加元素以提供新的向量。但是我希望能够允许将int的向量添加到双精度等向量中并自动获得正确的返回类型 - 这需要尾随返回类型。这是重现错误的最小代码,并做了一些有用的事情。

#include <vector>
#include <iostream>

template<class T, class U>
inline auto operator+(const std::vector<T> &a, const std::vector<U> &b) 
-> std::vector<decltype(T()+U())>
{
    std::vector<decltype(T()+U())> result;
    result.resize(std::min(a.size(),b.size()));
    for(unsigned int i=0; i<result.size(); ++i) result[i]=a[i]+b[i];
    return result;
}

int main()
{
    std::vector<std::vector<double> > mydoublevect2d(1);
    std::vector<std::vector<int> > myintvect2d(1);
    mydoublevect2d.resize(1);
    myintvect2d.resize(1);
    mydoublevect2d[0].push_back(1.0);
    myintvect2d[0].push_back(1);
    decltype(mydoublevect2d+myintvect2d) myothervect2d;
    myothervect2d=mydoublevect2d+myintvect2d;
    std::cout << myothervect2d[0][0];
    return 0;
}

不幸的是,这会导致编译器崩溃并生成以下错误

fatal error C1001: An internal error has occurred in the compiler.
1>  (compiler file 'msc1.cpp', line 1420)
1>   To work around this problem, try simplifying or changing the program near the locations listed above.
1>  Please choose the Technical Support command on the Visual C++ 
1>   Help menu, or open the Technical Support help file for more information

事实上,即使是以下主要功能也会导致相同的崩溃和错误

int main()
{
    std::vector<std::vector<double> > mydoublevect2d;
    std::vector<std::vector<int> > myintvect2d;
    decltype(mydoublevect2d+myintvect2d) myothervect2d;
    return 0;
}

代码在gcc 4.6.1上编译并运行正常。我尝试从operator +更改为名为add的函数,但这会导致同样的崩溃。使用这个功能与1d vecters工作正常,所以它与递归有关,即这工作

int main()
{
    std::vector<double> mydoublevect;
    std::vector<int> myintvect;
    mydoublevect.push_back(1.0);
    myintvect.push_back(1);
    decltype(mydoublevect+myintvect) myothervect=mydoublevect+myintvect;
    return 0;
}

有没有人遇到类似的问题和/或找到解决方案?

菲尔

0 个答案:

没有答案