这与我见过的其他问题类似,但考虑到 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)) {
}
通用 lambdato_ref
是...嗯,通用...因此,将其放在标题中是有意义的,这样人们就不会到处复制它。
我的问题:模板的链接注意事项是否也适用于通用 lambda? 换句话说,编译器/链接器有责任确保在具有相同模板参数的给定模板的多个实例化时不会违反 ODR。 我可以依赖相同的行为,还是应该将inline
说明符附加到auto to_ref = ...;
规范?
to_ref
是一个带有模板operator()
的对象,它不是任何类型的模板。
您需要标记它inline
遵守 ODR。