私は可変個引数でいくつかの実験を行っていますが、解決策を理解できない問題に遭遇しました-基本的に私は任意のデータ型のコンポーネントでツリーを構築しようとしています-ここにいくつかのコードがあります:
template <class A, class B>
struct SeqExpression
{
const A & first;
const B & then;
};
template <class A, class B>
SeqExpression<A,B>
make_seq(const A & a, const B & b)
{
return {a,b};
}
template <class A, class B, class ...T>
auto
make_seq(const A & first, const B & second, T ...rest) -> decltype(make_seq(make_seq(first,second),rest...))
{
return make_seq(make_seq(first,second),rest...);
}
それから私は試します:
auto x = make_seq("X","Y",'z');
しかし、GCC(4.7)は私に次のように語っています。
error: template instantiation depth exceeds maximum of 900 (use -ftemplate-depth= to increase the maximum) substituting ‘template<class A, class B, class ... T> decltype (make_seq(make_seq(first, second), rest ...)) make_seq(const A&, const B&, T ...) [with A = SeqExpression<char [2], char [2]>; B = char; T = {}]’
recursively required by substitution of ‘template<class A, class B, class ... T> decltype (make_seq(make_seq(first, second), rest ...)) make_seq(const A&, const B&, T ...) [with A = SeqExpression<char [2], char [2]>; B = char; T = {}]’
required by substitution of ‘template<class A, class B, class ... T> decltype (make_seq(make_seq(first, second), rest ...)) make_seq(const A&, const B&, T ...) [with A = char [2]; B = char [2]; T = {char}]’
それは解決できるはずですが、私には思えます!
make_seq("X","Y")
タイプSeqExpression< char[2],char[2] >
があるのでmake_seq(make_seq("X","Y"),'z')
タイプがありますSeqExpression< SeqExpression< char[2],char[2] >,char >
そしてそれは私には比較的非ループのようです。
何かご意見は?