+2018-12-12 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/80762
+ * include/bits/fs_path.h (path::_Path): Use remove_cv_t and is_void.
+ * include/experimental/bits/fs_path.h (path::_Path): Likewise.
+ * testsuite/27_io/filesystem/path/construct/80762.cc: New test.
+ * testsuite/experimental/filesystem/path/construct/80762.cc: New test.
+
2018-12-12 Jakub Jelinek <jakub@redhat.com>
P0595R2 - is_constant_evaluated
template<typename _Tp1, typename _Tp2 = void>
using _Path = typename
- std::enable_if<__and_<__not_<is_same<_Tp1, path>>,
+ std::enable_if<__and_<__not_<is_same<remove_cv_t<_Tp1>, path>>,
+ __not_<is_void<_Tp1>>,
__constructible_from<_Tp1, _Tp2>>::value,
path>::type;
template<typename _Tp1, typename _Tp2 = void>
using _Path = typename
- std::enable_if<__and_<__not_<is_same<_Tp1, path>>,
+ std::enable_if<__and_<__not_<is_same<typename remove_cv<_Tp1>::type,
+ path>>,
+ __not_<is_void<_Tp1>>,
__constructible_from<_Tp1, _Tp2>>::value,
path>::type;
--- /dev/null
+// Copyright (C) 2018 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17" }
+// { dg-do compile { target c++17 } }
+
+#include <filesystem>
+
+using std::filesystem::path;
+
+static_assert( !std::is_constructible_v<path, void> );
+static_assert( !std::is_constructible_v<path, volatile path> );
+static_assert( !std::is_constructible_v<path, volatile path&> );
+static_assert( !std::is_constructible_v<path, const volatile path> );
+static_assert( !std::is_constructible_v<path, const volatile path&> );
--- /dev/null
+// Copyright (C) 2018 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-do compile { target c++11 } }
+
+#include <experimental/filesystem>
+
+using std::experimental::filesystem::path;
+
+static_assert( !std::is_constructible<path, void>::value, "" );
+static_assert( !std::is_constructible<path, volatile path>::value, "" );
+static_assert( !std::is_constructible<path, volatile path&>::value, "" );
+static_assert( !std::is_constructible<path, const volatile path>::value, "" );
+static_assert( !std::is_constructible<path, const volatile path&>::value, "" );