Для 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?
EDIT: для ясности: вопрос касается функций __builtin_*
и ни о чем другом. Я пытался
#pragma intrinsic(abs)
но для этого требуется объявление функции abs, которую я бы не хотел иметь в моем глобальном пространстве имен.
constexpr
в компиляторе Microsoft? Ответ — нет, не для Visual Studio 2010 или следующей версии VS 11. - person Cody Gray   schedule 15.01.2012