filesystem/test/path_operator_ambiguity.cpp
Andrey Semashev 396eef1398 Restrict generic path comparison operators to avoid ambiguities with std lib.
Path comparison operators that accept arbitrary path source types now require
the other argument to be exactly path. This prevents the compiler from picking
those operators when the other argument is convertible to path. This can happen
even when neither of the arguments are actually paths, e.g. when the
comparison operators are brought into the current scope by a using directive.

Fixes https://github.com/boostorg/filesystem/issues/285.
2023-05-08 00:11:37 +03:00

54 lines
1.1 KiB
C++

// Copyright Andrey Semashev 2023
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See library home page at http://www.boost.org/libs/filesystem
//
// This test verifies that a using directive does not introduce operator
// ambiguity with the standard library.
// https://github.com/boostorg/filesystem/issues/285
#include <string>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;
bool test_eq(char* arg)
{
return std::string("abc") == arg;
}
bool test_ne(char* arg)
{
return std::string("def") != arg;
}
bool test_lt(char* arg)
{
return std::string("ghi") < arg;
}
bool test_gt(char* arg)
{
return std::string("jkl") > arg;
}
bool test_le(char* arg)
{
return std::string("mno") <= arg;
}
bool test_ge(char* arg)
{
return std::string("pqr") >= arg;
}
int main(int, char* argv[])
{
return test_eq(argv[0]) + test_ne(argv[0]) +
test_lt(argv[0]) + test_gt(argv[0]) +
test_le(argv[0]) + test_ge(argv[0]);
}