你能在对象函数上声明一个带有decltype的成员变量吗?

Jon*_*han 9 c++ decltype c++11

struct Example
{
    boost::tokenizer<boost::char_separator<char>> tokens;
    decltype (tokens.begin()) i;
};
Run Code Online (Sandbox Code Playgroud)

在Visual Studio 2013上,我收到编译器错误C2228:'.begin'的左边必须有class/struct/union.

这是有效的C++ 11代码,如果没有,有没有办法在没有为迭代器输入长模板类型的情况下执行此操作?

我认为decltype应该工作的逻辑是编译器可以绝对看到函数签名,所以我认为你可以根据它的返回类型声明一个变量.

Pra*_*ian 5

您的代码有效.这是一个已知的VS错误.链接的错误报告中的示例类似:

#include <list>

struct used {
    int bar;
};
struct wrap {
    used u;
    auto foo() -> decltype( u.bar ) { return u.bar; }   // works
    decltype( u.bar ) x;                                // error C2228
    std::list< decltype( u.bar ) > items;               // error C2228
};
Run Code Online (Sandbox Code Playgroud)