tr1 :: функциональная ошибка с g ++ 4.8.1

Код:

    #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));
}

Использование g ++ 4.8.1 в Linux, компиляция с --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;
^

Это не имеет никакого смысла. Использование соответствующих классов повышения работает нормально. Может кто-нибудь подтвердить, что это ошибка TR1 в G ++ 4.8.1?

-2

Решение

Libstdc ++ tr1::reference_wrapper Реализация имеет это:

  template<typename... _Args>
typename result_of<_M_func_type(_Args...)>::type
operator()(_Args&... __args) const
{
return __invoke(get(), __args...);
}

result_of выражение использует побочную стоимость _M_func_type параметр (который является параметром шаблона reference_wrapper то есть Test), поэтому он пытается сформировать тип функции Test(), который использует побочную стоимость Test возвращаемый тип, который недопустим для неполного или абстрактного типа. Я думаю, что я исправил это для std::reference_wrapper давным-давно, он должен использовать result_of<_M_func_type&(Args...)>,

Реализация TR1 в libstdc ++ больше не поддерживается — TR1 выполнил свою задачу, но время прошло.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]