当我使用启用程序时,是否存在“未使用的函数参数消除优化”:
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编译器)?
根据lto / ltcg存在怎么样?
答案 0 :(得分:3)
严格地说,这样做违反了ABI,据我所知 - 也就是说,其他一些没有优化的编译器可能会传入一个值。
然而,根据我的经验,Clang有一种非常恼人的习惯,即将其视为冗余的参数移除 - 尤其是空类型的值。所以我建议编译器可以做,如果它可以证明该值未被使用。