From 2fc65041beabcb4c970deeb8ece010c10b0b40f9 Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Sun, 28 Aug 2016 21:26:01 +0000 Subject: Implement LWG 2711. Constrain path members. llvm-svn: 279945 --- .../path.member/path.assign/source.pass.cpp | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'libcxx/test/std/experimental/filesystem/class.path/path.member/path.assign/source.pass.cpp') diff --git a/libcxx/test/std/experimental/filesystem/class.path/path.member/path.assign/source.pass.cpp b/libcxx/test/std/experimental/filesystem/class.path/path.member/path.assign/source.pass.cpp index ae725a88590..9e48cbf1e7f 100644 --- a/libcxx/test/std/experimental/filesystem/class.path/path.member/path.assign/source.pass.cpp +++ b/libcxx/test/std/experimental/filesystem/class.path/path.member/path.assign/source.pass.cpp @@ -170,6 +170,49 @@ void RunTestCase(MultiStringType const& MS) { } } +template ()))> +constexpr bool has_assign(int) { return true; } +template +constexpr bool has_assign(long) { return false; } +template +constexpr bool has_assign() { return has_assign(0); } + +void test_sfinae() { + using namespace fs; + { + using It = const char* const; + static_assert(std::is_assignable::value, ""); + static_assert(has_assign(), ""); + } + { + using It = input_iterator; + static_assert(std::is_assignable::value, ""); + static_assert(has_assign(), ""); + } + { + struct Traits { + using iterator_category = std::input_iterator_tag; + using value_type = const char; + using pointer = const char*; + using reference = const char&; + using difference_type = std::ptrdiff_t; + }; + using It = input_iterator; + static_assert(std::is_assignable::value, ""); + static_assert(has_assign(), ""); + } + { + using It = output_iterator; + static_assert(!std::is_assignable::value, ""); + static_assert(!has_assign(), ""); + + } + { + static_assert(!std::is_assignable::value, ""); + static_assert(!has_assign(), ""); + } +} + int main() { for (auto const& MS : PathList) { RunTestCase(MS); @@ -177,4 +220,5 @@ int main() { RunTestCase(MS); RunTestCase(MS); } + test_sfinae(); } -- cgit v1.2.3