Использование DEXTTYPE, чтобы изложить это на Const

Я пытаюсь решить проблему, в которой DECLTYPE будет значительно упростить вещи, но я работаю в проблеме DECLTYPE * Это и добавление Const квалификатор . Примерный код ниже демонстрирует проблему.

#include 

struct Foo
{
  void bar()
  {
    static_cast(*this).bar();
  }

  void bar() const
  {
    std::cout << "bar" << std::endl;
  }
};

int main(int argc, char* argv[])
{
  Foo f;
  f.bar(); // calls non-const method
  return 0;
}

Код компилирует в MSVC2010, но выполнение рекусирует до тех пор, пока не возникает переполнение стека.

IDEONE сообщает об ошибке компилятора

prog.cpp: In member function 'void Foo::bar()':
prog.cpp:7:38: error: 'const' qualifiers cannot be applied to 'Foo&'

, если я изменил строку

static_cast(*this).bar();

на

static_cast(*this).bar();

, она работает, как ожидалось.

Я не злоупотребляю или недоразумению decltype?

11
задан Luc Danton 14 September 2011 в 14:24
поделиться