C++ 如何确保lambda的自动参数为同一类型?

C++ 如何确保lambda的自动参数为同一类型?,c++,lambda,c++14,C++,Lambda,C++14,如果我有一个lambda函数 auto foo = [](auto && a, auto && b){ /* some random c++ code */ }; 如何声明a和b应该是相同的类型,即使该类型可以是任何类型?您可以在lambda主体中添加一个静态\u断言: #include <type_traits> auto foo = [](auto && a, auto && b){ static_ass

如果我有一个lambda函数

auto foo = [](auto && a, auto && b){ /* some random c++ code */ };

如何声明a和b应该是相同的类型,即使该类型可以是任何类型?

您可以在lambda主体中添加一个
静态\u断言

#include <type_traits>

auto foo = [](auto && a, auto && b){
    static_assert(std::is_same<typename std::remove_reference<decltype(a)>::type,
            typename std::remove_reference<decltype(b)>::type>::value, 
            "Must be of the same type!");
};

由于这里推导的类型是字符数组,而不是
const char*

我知道它是用C++14标记的,但这里有一个C++20解决方案以防万一:

auto foo = []<typename T>(T && a, T && b){ /* some random c++ code */ };
<代码> AutoFoo[](T&A,T&B){/*一些随机C++代码*/};
如果您想在a和b的类型不同时停止编译,为什么不添加
静态断言(std::is_same_v)作为一些随机C++代码的第一行?<代码> Auto Foo= [](Auto&a,DeCype(a)b){};<代码>一个很好的介绍模板lambda for c++20
auto foo = []<typename T>(T && a, T && b){ /* some random c++ code */ };