filesystem/test/path_iter_ctor_overload_test.cpp
Andrey Semashev 39b0f3a1fe Check that the type is an iterator in is_path_source_iterator.
This fixes hard compilation error when the passed type is not an iterator
at all. As a result, path constructors from iterators are no longer
selected by the compiler in overload resolution in users' code, when
the caller is passing an initializer list with a pair of non-iterator
elements. Added a test for this fix.

Also, use integral_constant to implement boolean type traits.

Fixes https://github.com/boostorg/filesystem/issues/287.
2023-05-21 17:27:12 +03:00

41 lines
855 B
C++

// Copyright 2023 Andrey Semashev.
//
// Distributed under 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
//
// The test verifies that \c boost::filesystem::path constructors
// from iterators don't interfere with initializer list constructor.
//
// https://github.com/boostorg/filesystem/issues/287
#include <boost/filesystem/path.hpp>
#include <boost/config.hpp>
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
#include <initializer_list>
void test(std::initializer_list< boost::filesystem::path > paths)
{
}
void test(boost::filesystem::path const& path)
{
}
int main()
{
boost::filesystem::path a, b;
test({a, b});
}
#else // !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
int main()
{
}
#endif // !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)