オーバーロードされた関数が引数と同じ型で再定義されているため、コンパイルに失敗する C++11 コードがあります。
char const* foo(uint64_t) { return "%" PRIu64; }
char const* foo(unsigned long long int) { return "%llu"; }
これら 2 つのプリミティブ間の同等性をチェックするために追加できるコンパイラ マクロはありますか?コンパイル前に、同等である場合は 2 番目を削除しますか?
他の型の文字ポインタを返す関数は他にもあります。signed
たとえば、 aとaunsigned long long int
が同じバイト数を使用していても、これを追加しても問題は発生しません。
char const* foo(long long int) { return "%lld"; }
そのため、型が使用するメモリ量を確認するだけでは不十分なようです。他のアプローチは何ですか?