Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
当我使用以下启用程序时,是否存在“未使用的功能参数消除优化”:
template< typename T > void f(T x, typename std::enable_if< some_predicate< T > >::type * = nullptr) { /* do something useful with x */; }
?
我的意思是,会生成额外的void *参数传递代码(例如,对于 GCC 4.8 编译器)?
void *
鉴于 lto/ltcg 的存在呢?
严格来说,这样做违反了 ABI,据我所知,其他一些没有优化的编译器可能会在那里传递一个值。
然而,根据我的经验,Clang 有一个非常恼人的习惯,即删除它认为多余的参数——尤其是空类型的值。因此,我建议编译器可以证明该值未被使用。