以下计划:
#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