Class-wide`using`别名作为返回类型发出编译器错误

时间:2013-08-26 21:51:03

标签: c++11 gcc4.7

为了保持一些代码可读并避免拼写错误,我在头文件的类定义的public部分使用以下语句:

using Assembly_Tuple = std::tuple <std::vector <std::string>, Trigger_Map, Attribute_Map>;

我在Assembly_Tuple作为返回类型的头文件中声明了一个函数:

Assembly_Tuple merge_node_attributes(const std::string& node_name, std::string tmpl_name="");

我在源文件中定义了这个函数:

Widget_Server_Interface::Assembly_Tuple 
Widget_Server_Interface::merge_node_attributes(const std::string& n, const std::string& t)
{
    //...
}

但是当我尝试编译时,我收到以下错误:

src/WidgetServer/WidgetServerInterface.cpp:31:1: error: ‘Assembly_Tuple’ in ‘class Widget_Server_Interface’ does not name a type

但是,在内部定义中,没有任何问题。

如果我将那条线改为恶劣的:

std::tuple<std::vector<std::string>, Trigger_Map, std::map<int,Node_Value>>
Widget_Server_Interface::merge_node_attributes (...) {...}
好,没事。显然,问题在于使用范围之外的别名,即使它是公开的 我明确地调用了类名称空间。

我查看了Bjarne的书,但无论这是否合法,他都不会在任何地方提及。

这是使用gcc 4.7。

大多数情况下,我只想知道为什么这不是有效的。

0 个答案:

没有答案