Использование decltype для приведения этого к const

Я пытаюсь решить проблему, в которойdecltype будет сильно упрощать вещи, но я сталкиваюсь с проблемой, используяdecltype на*this и добавивconst Классификатор. Пример кода ниже демонстрирует проблему.

#include <iostream>

struct Foo
{
  void bar()
  {
    static_cast<const decltype(*this)&>(*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<const decltype(*this)&>(*this).bar();

в

static_cast<const Foo&>(*this).bar();

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

Я неправильно использую или неправильно понимаю decltype?

Ответы на вопрос(1)

Ваш ответ на вопрос