-Werror でコンパイルしたいとき、Header-only library 内のコードがDeprecatedなものを含む場合はどのように対処すべきですか？


`-Werror`
でプロジェクトをコンパイルしていて、DeprecatedなHeaderOnlyLibraryのために全体のエラー抑止はしたくないのですが、このライブラリに対してだけ抑止するにはどのようにすべきですか？
gcc, clang, msvc 共通で使えるような方法はありますか？

例：

deprecated.hpp

[code]

    volatile int b = 0;
    
    void a(){
        b+=1;
    }
    
[/code]

main.cpp

[code]

    #include "deprecated.hpp"
    
    int main(){
        a();
        return 0;
    }
    
[/code]

コンパイル時のエラー表示:

[code]

    $ g++ main.cc -Wall -Wextra -Werror -std=gnu++2b
    
    deprecated.hpp: In function 'void a()':
    deprecated.hpp:4:6: error: compound assignment with 'volatile'-qualified left operand is deprecated [-Werror=volatile]
        4 |     b+=1;
          |     ~^~~
    cc1plus: all warnings being treated as errors
    
[/code]




Deprecatedな の意図がよくつかめませんでしたが、`deprecated.hpp`がシステムヘッダーなのであれば`#include
<deprecated.hpp>`と記述し、そうでないのであれば`deprecated.hpp`を修正するのがよいかと。

コンパイラーはシステムヘッダーと通常のヘッダーを明確に区別します。前者は`#include <filename>`ですが、後者は`#include
"filename"`となります。  
その上で、GCCはシステムヘッダーであれば、プログラマの制御下にないとして警告を抑止します（[`-Wsystem-
headers`](https://gcc.gnu.org/onlinedocs/gcc-10.2.0/gcc/Warning-
Options.html#index-Wsystem-
headers)で警告を有効化できます）。MSVCも[`/external:anglebrackets`](https://devblogs.microsoft.com/cppblog/broken-
warnings-theory/)でシステムヘッダーに対する警告を抑止できます。

