В моем проекте С++ 14 я использую
#include <algorithm>
using std::max; // for max(a,b)
но я также хочу предоставить функцию max()
, принимающую любое количество аргументов (равного типа). С этой целью я добавил
template<typename T, typename...A>
constexpr inline T const& max(T const&x, T const&y, A...&&z)
{
return max(max(x,y), std::forward<A>(z)...);
}
но при вызове типа
double x,y,z;
...
auto m = max(x,y,z);
компилятор пытается вместо моей перегрузки использовать
namespace std {
template< class T, class Compare >
constexpr const T& max( const T& a, const T& b, Compare comp );
}
от algorithm
. Как я могу избежать этого (но при этом обеспечить предполагаемую функциональность)?
(Обратите внимание, что есть вопрос о вариативном min/max, но он не решить мою проблему, просто изменив имя на vmin
/vmax
.)
std::max
, которая принимает список инициализаторов. Возможно, это сработало бы для вас вместо этого? en.cppreference.com/w/cpp/algorithm/max - person Retired Ninja   schedule 15.09.2020using std::max
-- везде используйте явное разрешение пространства имен. - person wcochran   schedule 15.09.2020max
в отдельное пространство имен? - person Den-Jason   schedule 16.09.2020