-2

コード:

    #include <tr1/functional>

    class Test
    {
    public:
        Test() { ; }
        virtual void foo() = 0;
    };

    void someFunc(Test& j)
    {
        j.foo();
    }

    void func(Test& j)
    {
       std::tr1::bind(someFunc, std::tr1::ref(j));
    }

Linuxでg ++ 4.8.1を使用してコンパイルすると、次の--std=c++11ようになります。

    In file included from foo.cpp:1:0:
    /usr/include/c++/4.8.1/tr1/functional: In instantiation of ‘class std::tr1::reference_wrapper<Test>’:
    foo.cpp:17:44:   required from here
    /usr/include/c++/4.8.1/tr1/functional:495:9: error: cannot allocate an object of abstract type ‘Test’
             operator()(_Args&... __args) const
             ^
    foo.cpp:3:7: note:   because the following virtual functions are pure within ‘Test’:
     class Test
           ^
    foo.cpp:7:18: note:     virtual void Test::foo()
         virtual void foo() = 0;
                      ^

これは意味がないようです。対応するブースト クラスを使用すると問題なく動作します。誰かがこれが G++ 4.8.1 の TR1 バグであることを確認できますか?

4

1 に答える 1