Учитывая следующую программу:
#include <cmath>
int main()
{
std::abs(0u) ;
}
gcc и clang не согласны с тем, является ли это плохо сформированным. Используя gcc с libstdc++, код строит без ошибок или предупреждений (видеть его в прямом эфире), используя clang с libc++ он генерирует следующую ошибку (видеть ее в прямом эфире):
error: call to 'abs' is ambiguous
std::abs(0u) ;
^~~~~~~~
Какой результат правильный? Должно ли abs(0u) быть двусмысленным или нет?
MSalters указывает на интересный вопрос: Шаблонная версия std:: abs.