Я пытаюсь решить проблему, в которой 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?