【发布时间】:2018-08-29 18:29:32
【问题描述】:
是否符合以下 C++ 代码标准?
#include <iostream>
int main()
{
[](auto v){ std::cout << v << std::endl; }.operator()<int>(42);
}
clang++ 3.8.0 和 g++ 7.2.0 compile this code fine(编译器标志为 -std=c++14 -Wall -Wextra -Werror -pedantic-errors)。
【问题讨论】:
-
如果你想查,这里有一份标准的here。
-
AFAIK 确实如此。 lambda 的
operator()是公开的,所以我看不到任何可以阻止它的东西。 -
我知道您不必在
language-lawyer中给出原因,但出于好奇,您可能希望在哪种情况下给出原因? -
@SergeyA,
template <class From, class To> constexpr To nightmare_cast(From t) { return [](auto v)constexpr{ return v; }.operator() < To > (t); }愿诸神原谅我:)
标签: c++ templates lambda language-lawyer generic-lambda