【发布时间】:2015-11-26 03:18:28
【问题描述】:
今天无意中发现了如下代码sn-p:
#include <utility>
int main()
{
auto a = [](std::pair<auto, auto> value)
{
};
a(std::pair<int, bool>{ 3, true });
}
我只有一个问题:标准是否支持此代码?
它在 GCC 中编译(使用 -std=c++14),但不是 clang 或 Visual Studio 2015 (VC++14)。
这似乎应该成为标准的一部分,因为如果 lambda 应该具有与常规函数相同的模板支持,那么应该支持。
这似乎转换为所有模板类型,而不仅仅是std::pair。
【问题讨论】:
-
这称为泛型 lambda,是 C++14 的一部分
-
@v.oddou 我知道这样的功能,我只是对为什么该示例无法在 Clang AND Visual Studio 下编译感到困惑。您是在提议 Clang 和 VC++14 中都存在错误吗?
-
有趣。我不知道在普通函数声明中允许使用
auto。同样,它可以在 GCC 中编译,但不能在 clang 或 VC++14 中编译。 -
正确,因为它是concepts lite的一部分,不在C++14中,但gcc支持它作为扩展。
标签: c++ templates c++11 lambda type-deduction