Учитывая следующую программу:
#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.