1

当我使用以下启用程序时,是否存在“未使用的功能参数消除优化”:

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 的存在呢?

4

1 回答 1

3

严格来说,这样做违反了 ABI,据我所知,其他一些没有优化的编译器可能会在那里传递一个值。

然而,根据我的经验,Clang 有一个非常恼人的习惯,即删除它认为多余的参数——尤其是空类型的值。因此,我建议编译器可以证明该值未被使用。

于 2013-05-25T18:27:42.910 回答