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 に違反します。つまり、最適化を行わなかった他のコンパイラが ABI に値を渡す可能性があるということです。

ただし、私の経験では、Clang には、冗長と見なされるパラメーター (特に空の型の値) を削除するという非常に苛立たしい習慣があります。したがって、値が未使用であることを証明できる場合は、コンパイラーが行うことをお勧めします。

于 2013-05-25T18:27:42.910 に答える