Intel Math Kernel Library には、ヘッダー ファイルに次のコードが含まれています。
#ifndef MKL_Complex16
typedef
struct _MKL_Complex16 {
double real;
double imag;
} MKL_Complex16;
#endif
here および hereで説明されているように、この構造体定義は、ユーザーが次のように記述してオーバーライドできます。
#define MKL_Complex16 std::complex<double>
ヘッダファイルがインクルードされる前。この行でMKL_Complex16
は is 'd です。これは、文字列がどこでも#define
リテラル文字に置き換えられることを意味します。std::complex<double>
そうでない場合は、typedef
'ed' になり、コンパイラにより多くの情報が提供されます。
これは容認できる慣行と見なされますか? Intelによって実装されているので、そうに違いないと思います。しかし、いくつかのコードをデバッグしようとすると、非常に混乱することがわかりました。