GCC と Clang の場合、これは簡単に実行できます。
// absolute value
inline constexpr int abs(const int number)
{ return __builtin_abs(number); }
inline constexpr long abs(const long number)
{ return __builtin_labs(number); }
inline constexpr long long abs(const long long number)
{ return __builtin_llabs(number); }
inline constexpr double abs(const double& number)
{ return __builtin_fabs(number); }
inline constexpr float abs(const float& number)
{ return __builtin_fabsf(number); }
inline constexpr long double abs(const long double& number)
{ return __builtin_fabsl(number); }
これは魅力のように機能します。ほとんどすべての数学関数に対して同様のことを行い、コードを MSVC でも動作させたいと考えています。MSVCで上記と同等のことを行うにはどうすればよいですか?
編集:明確にするために:質問は__builtin_*
関数に関するものであり、他には何もありません。私は試した
#pragma intrinsic(abs)
しかし、これには abs 関数の宣言が必要です。これは、グローバル名前空間には入れたくないものです。