错误的自动演绎C ++ 14

时间:2018-10-18 16:21:33

标签: c++ c++14 auto

我的'auto'返回类型函数的行为异常。有谁知道为什么第二个函数调用返回的是int而不是double?

编译器版本:g ++(Ubuntu 5.4.0-6ubuntu1〜16.04.10)5.4.0 20160609

#include <string>
#include <iostream>

double operator+(const int& a,const std::string& b){
    return 3.4;
}
auto f(){
    return 3.4;
}
auto sum(auto a, auto b){
    return a + b;
}

int main(){
    std::cout<< sum(1.0, std::string("hello")) <<std::endl;
    std::cout<< sum(1, std::string("hello")) <<std::endl;
    std::cout<< f() << std::endl;
}
//3.4
//3
//3.4

1 个答案:

答案 0 :(得分:2)

首先,自动功能参数不是标准的C ++。这是一个gcc扩展,可以预期标准委员会的一些工作。有一次,有人在讨论引入概念时允许这种语法。我不知道情况是否如此。

对于奇怪的行为,它似乎只是一个在gcc 5.5.0和gcc 6.1.0之间修复的编译器错误