Я пытаюсь решить проблему, в которой decltype
значительно упростит ситуацию, но я столкнулся с проблемой, используя decltype
on *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?