gcc x86上的类型不完整但ARM上没有

时间:2017-01-30 09:43:47

标签: c++ gcc x86 arm

以下计划:

#include <tuple>
#include <utility>

template<uint32_t id>
class Foo {};

// http://stackoverflow.com/questions/39041236/tuple-of-sequence
template<uint32_t N, class = std::make_index_sequence<N>> class FooManagerImpl;

template<uint32_t N, uint32_t... ids>
class FooManagerImpl<N, std::index_sequence<ids...>>
{
    std::tuple<Foo<ids>...> foos;
};

using FooManager = FooManagerImpl<7U>;

int main()
{
    FooManager mm;
    return 0;
}

使用ARM上的GCC工具链进行编译:

/usr/bin/arm-linux-gnueabihf-g++ -c -Wall -Werror -std=c++14 -o main.o main.cpp

但是当我尝试在x86上编译它时它失败了:

g++ -c -Wall -Werror -std=c++14 -o main.o main.cpp
main.cpp: In function ‘int main()’:
main.cpp:21:16: error: aggregate ‘FooManager mm’ has incomplete type and cannot be defined
     FooManager mm;
                ^
Makefile:25: recipe for target 'main.o' failed
make: *** [main.o] Error 1

我猜其中一个编译器肯定存在错误,但我无法判断x86是否适合投诉。

此外,如果有人知道如何解决这个问题,那就太棒了。

编译器版本都是gcc 5.4:

$ /usr/bin/arm-linux-gnueabihf-g++ --version
arm-linux-gnueabihf-g++ (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.1) 5.4.0 20160609

$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

0 个答案:

没有答案