Я сталкиваюсь с ошибкой компиляции при попытке статического использования аргумента внутри ускорителя феникса lambda. Ошибки сами слишком длинны, поэтому я отправил их в pastebin here.boost :: phoenix :: static_cast_ compile errors
Я создал минимальный пример, показывающий, что я пытаюсь сделать. Если я сделаю переменную b в указателе A и, следовательно, не произнесет, тогда все будет компилироваться и запускаться правильно. Кто-нибудь знает, почему это происходит?
Минимальный пример (компилировать с "звоном ++ -lboost_thread phoenix_test.cpp"):
#include <boost/phoenix.hpp>
#include <iostream>
using namespace boost;
using namespace phoenix;
using namespace arg_names;
using namespace local_names;
class A
{
public:
A(int a)
: mA(a)
{};
int GetX() const {return mA;};
protected:
int mA;
};
class B : public A
{
public:
B(int a)
: A(a)
{};
int GetX() const { return mA + 1; }
};
int main (void)
{
const A* a = new A(3);
const A* b = new B(2);
BOOST_AUTO(test, (_1->*&A::GetX)() + (static_cast_<const B*>(_2)->*&B::GetX)());
std::cout << test(a, b) << std::endl;
delete a;
delete b;
return 0;
}
Компилятор использовали лязг 3.4 и GCC 4.6.3 также пытались.
по электронной почте Ой. Вы скомпилировали правильный образец? [Ваш код компилируется] (http://coliru.stacked-crooked.com/a/8429237e1ff4840f) и только ссылки на ошибки 'dynamic_cast' – sehe
Вы правы - я скомпилировал неправильный образец. Тем не менее, я все еще получаю ошибки компиляции при компиляции с static_cast_. [Здесь] (http://pastebin.com/raw.php?i=bjLaSrHe) - сообщение компилятора для статического броска. – Lejar