O uso de #pragma warning push / pop é o caminho certo para alterar temporariamente o nível de aviso?

De vez em quando é difícil escrever código C ++ que não emitisse avisos. Ter os avisos ativados é, no entanto, uma boa ideia. Portanto, muitas vezes é necessário desativar os avisos em torno de alguma construção específica e tê-los ativados em todas as outras partes do código.

Eu vi duas maneiras de fazer isso até agora.

O primeiro é usar#pragma warning( push ) e#pragma warning( pop ):

 #pragma warning( push )
 #pragma warning( disable: ThatWarning )
 //code with ThatWarning here
 #pragma warning( pop )

O segundo é usar#pragma warning( default ):

 #pragma warning( disable: ThatWarning )
 //code with ThatWarning here
 #pragma warning( default: ThatWarning )

O problema que vejo na segunda variante é que ele descarta o nível de aviso original - o aviso pode ter sido desativado antes disso ou seu nível de aviso pode ter sido alterado. Usandodefault descartaria essas alterações.

A primeira abordagem parece limpa. Há algum problema com isso? Existem maneiras melhores de conseguir o mesmo?

questionAnswers(6)

yourAnswerToTheQuestion