我正试图解决一个问题 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?