Для 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, которую я не хотел бы иметь в моем глобальном пространстве имен.