我正在尝试创建一个元函数,该元函数创建std::tuple
N
类型为T
的args,例如:
my_meta_function<4, int>::type
会产生:
std::tuple<int, int, int, int>
或者:
my_meta_function<2, std::string>::type
会产生:
std::tuple<std::string, std::string>
到目前为止,我提出的是:
template <std::size_t N, class T, class... Args>
struct my_meta_function
{
typedef typename my_meta_function<N - 1, Args..., T>::type type;
};
template <class... Args>
struct my_meta_function<0, Args...>
{
typedef std::tuple<Args...> type;
};
我不太确定我的模板递归是否正确,但是在GCC 4.7.2中,当我尝试实例化此模板时,编译器失败,并显示错误消息:
test.cpp:13:8: internal compiler error: in process_partial_specialization, at cp/pt.c:4414
Please submit a full bug report,
with preprocessed source if appropriate.
问题:我这样做是否正确? GCC 4.7.2此时是否只是马车?或者我编码错误了吗?