1

私はこのようなことをしようとしています:

template <class ... Required>
class Base
{
    template <class First, class ... Rest>
    void bar(First f, Rest ... r)
    {
        [...]
        return bar(r...);
    }
    void bar()
    {
        return;
    }
    public:
        template <class ... Optional>
        void foo(Required ... r, Optional ... o)
        {
            [...]
            bar(r...); //separate the required from the optional
            bar(o...);
        }
};

class Child : Base<Foo1, Foo2>
{
    public:
        Child()
        {
            [...]
            foo(foo1,foo2,foo3);
        }
}

ただし、最初のbar呼び出しはパラメーターのみではなくすべてのパラメーターを受け取りRequired、2 番目の呼び出しはパラメーターをまったく受け取りません。複数の可変パラメータについて何か見逃していましたか? コンパイラはそれが であり、残りは であることを認識すべきではありませRequired...Foo1,Foo2Optional?

4

1 に答える 1

1

これは、使用しているコンパイラのバグである可能性が最も高いと思います。gcc 4.6.3 と 4.7.2、clang 3.0 と 3.3 で試してみたところ、clang 3.0 を除いてすべてが期待どおりの出力を生成しました。

于 2012-12-17T17:38:38.863 に答える