diff options
6 files changed, 197 insertions, 0 deletions
diff --git a/libcxx/include/experimental/system_error b/libcxx/include/experimental/system_error new file mode 100644 index 00000000000..b1d4c913fa5 --- /dev/null +++ b/libcxx/include/experimental/system_error @@ -0,0 +1,59 @@ +// -*- C++ -*- +//===-------------------------- system_error ------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef _LIBCPP_EXPERIMENTAL_SYSTEM_ERROR +#define _LIBCPP_EXPERIMENTAL_SYSTEM_ERROR + +/** + experimental/system_error synopsis + +// C++1y + +#include <system_error> + +namespace std { +namespace experimental { +inline namespace fundamentals_v1 { + + // See C++14 19.5, System error support + template <class T> constexpr bool is_error_code_enum_v + = is_error_code_enum<T>::value; + template <class T> constexpr bool is_error_condition_enum_v + = is_error_condition_enum<T>::value; + +} // namespace fundamentals_v1 +} // namespace experimental +} // namespace std + +*/ + +#include <experimental/__config> + +#if _LIBCPP_STD_VER > 11 + +#include <system_error> + +_LIBCPP_BEGIN_NAMESPACE_LFTS + +#if __has_feature(cxx_variable_templates) + +template <class _Tp> _LIBCPP_CONSTEXPR bool is_error_code_enum_v + = is_error_code_enum<_Tp>::value; + +template <class _Tp> _LIBCPP_CONSTEXPR bool is_error_condition_enum_v + = is_error_condition_enum<_Tp>::value; + +#endif /* __has_feature(cxx_variable_templates) */ + +_LIBCPP_END_NAMESPACE_LFTS + +#endif /* _LIBCPP_STD_VER > 11 */ + +#endif /* _LIBCPP_EXPERIMENTAL_SYSTEM_ERROR */
\ No newline at end of file diff --git a/libcxx/test/libcxx/experimental/utilities/syserror/header.system_error.synop/includes.pass.cpp b/libcxx/test/libcxx/experimental/utilities/syserror/header.system_error.synop/includes.pass.cpp new file mode 100644 index 00000000000..57cbb73b44d --- /dev/null +++ b/libcxx/test/libcxx/experimental/utilities/syserror/header.system_error.synop/includes.pass.cpp @@ -0,0 +1,22 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// <experimental/system_error> + +#include <experimental/system_error> + +#ifndef _LIBCPP_STD_VER > 11 +# ifndef _LIBCPP_SYSTEM_ERROR +# error "<experimental/system_error> must include <system_error>" +# endif +#endif + +int main() +{ +} diff --git a/libcxx/test/libcxx/experimental/utilities/syserror/version.pass.cpp b/libcxx/test/libcxx/experimental/utilities/syserror/version.pass.cpp new file mode 100644 index 00000000000..35f6a59c387 --- /dev/null +++ b/libcxx/test/libcxx/experimental/utilities/syserror/version.pass.cpp @@ -0,0 +1,20 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// <experimental/system_error> + +#include <experimental/system_error> + +#ifndef _LIBCPP_VERSION +#error _LIBCPP_VERSION not defined +#endif + +int main() +{ +} diff --git a/libcxx/test/std/experimental/utilities/syserror/header.system_error.synop/includes.pass.cpp b/libcxx/test/std/experimental/utilities/syserror/header.system_error.synop/includes.pass.cpp new file mode 100644 index 00000000000..de813925f21 --- /dev/null +++ b/libcxx/test/std/experimental/utilities/syserror/header.system_error.synop/includes.pass.cpp @@ -0,0 +1,21 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11 + +// <experimental/system_error> + +#include <experimental/system_error> + +int main() +{ + // Check that <system_error> has been included + std::error_code ec; + ((void)ec); +} diff --git a/libcxx/test/std/experimental/utilities/syserror/header.system_error.synop/is_error_code_enum_v.pass.cpp b/libcxx/test/std/experimental/utilities/syserror/header.system_error.synop/is_error_code_enum_v.pass.cpp new file mode 100644 index 00000000000..66f8ceed43c --- /dev/null +++ b/libcxx/test/std/experimental/utilities/syserror/header.system_error.synop/is_error_code_enum_v.pass.cpp @@ -0,0 +1,37 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11 + +// <experimental/system_error> + +// template <class T> constexpr bool is_error_code_enum_v; + +#include <experimental/system_error> +#include <ios> /* for std::io_errc */ + +namespace ex = std::experimental; + +int main() { + { + static_assert(ex::is_error_code_enum_v<std::io_errc>, ""); + + static_assert(ex::is_error_code_enum_v<std::io_errc> == + std::is_error_code_enum<std::io_errc>::value, ""); + + static_assert(std::is_same<decltype(ex::is_error_code_enum_v<std::io_errc>), + const bool>::value, ""); + } + { + static_assert(!ex::is_error_code_enum_v<int>, ""); + + static_assert(ex::is_error_code_enum_v<int> == + std::is_error_code_enum<int>::value, ""); + } +} diff --git a/libcxx/test/std/experimental/utilities/syserror/header.system_error.synop/is_error_condition_enum.pass.cpp b/libcxx/test/std/experimental/utilities/syserror/header.system_error.synop/is_error_condition_enum.pass.cpp new file mode 100644 index 00000000000..9c3386bd58e --- /dev/null +++ b/libcxx/test/std/experimental/utilities/syserror/header.system_error.synop/is_error_condition_enum.pass.cpp @@ -0,0 +1,38 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11 + +// <experimental/system_error> + +// template <class T> constexpr bool is_error_condition_enum_v; + +#include <experimental/system_error> +#include <type_traits> +namespace ex = std::experimental; + +int main() { + { + static_assert(ex::is_error_condition_enum_v<std::errc>, ""); + + static_assert(ex::is_error_condition_enum_v<std::errc> == + std::is_error_condition_enum<std::errc>::value, ""); + + static_assert( + std::is_same<decltype(ex::is_error_condition_enum_v<std::errc>), + const bool>::value, + ""); + } + { + static_assert(!ex::is_error_condition_enum_v<int>, ""); + + static_assert(ex::is_error_condition_enum_v<int> == + std::is_error_condition_enum<int>::value, ""); + } +} |