自动返回types推演是否强制多个函数具有相同的返回types?

考虑下面的代码片段:

struct A { auto foo(), bar(); }; auto A::foo() { return 1; } auto A::bar() { return 'a'; } int main() { } 

它在Clang ++ 3.7.0中编译得很好。

它在G ++ 5.2.0中失败 :

 main.cpp: In member function 'auto A::bar()': main.cpp:7:24: error: inconsistent deduction for 'auto': 'int' and then 'char' auto A::bar() { return 'a'; } 

自动返回types推演是否强制在单个语句中声明的多个函数具有相同的返回types?

基于以下情况,海湾合作委员会在这种情况下有正确的行为,但只有巧合(见下文):

§7.1.6.4[dcl.spec.auto] / 8

如果init-declarator-list包含多个init-declarator,则它们都应该形成variables的声明。

为什么只能巧合? 错误消息是一个线索。 更改函数以推导出相同的返回types会导致GCC编译代码。 虽然在这里给出一个错误是正确的,尽pipe是误导性的,但只有当推导types不一致时才这样做。 它应该总是给一个错误。

是。

auto并不意味着“任何types”,它意味着编译器应该推断的特定types。

这不是特定于函数声明, auto i = 1, f = 4.7; 也不起作用。

另外,在一个语句中声明多个函数似乎不是一个好主意。