【发布时间】:2019-08-27 14:45:34
【问题描述】:
这与我见过的其他问题类似,但鉴于 C++17 引入了内联变量,值得一问。考虑这种模式:
auto to_ref = [](auto const& ptr) -> decltype(auto) { return *ptr; }
std::vector<std::unique_ptr<Foo>> foo_ptrs = from_somewhere();
for (Foo const& foo : foo_ptrs | transform(to_ref)) {
}
to_ref 通用 lambda 是...嗯,通用...所以将它放在标题中是有意义的,这样人们就不会到处复制它。
我的问题:模板的链接注意事项是否也适用于通用 lambda?换句话说,编译器/链接器有责任确保对于具有相同模板参数的给定模板的多个实例化不会违反 ODR。我可以依赖相同的行为,还是应该在 auto to_ref = ...; 规范之前添加 inline 说明符?
【问题讨论】:
-
和这个Q不一样,但是很好读和类似的情况:stackoverflow.com/questions/34717823/…
标签: c++ lambda one-definition-rule