From e5407178d6789ccf462dbb39ad0acc5cbde6581c Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Wed, 22 Jul 2015 04:14:38 +0000 Subject: Cleanup <__functional_03> <__functional_03> provides the C++03 definitions for std::memfun and std::function. However the interaction between and <__functional_03> is ugly and duplicates code needlessly. This patch cleans up how the two headers work together. The major changes are: - Provide placeholders, is_bind_expression and is_placeholder in for both C++03 and C++11. - Provide bad_function_call, function fwd decl, __maybe_derive_from_unary_function and __maybe_derive_from_binary_function in for both C++03 and C++11. - Move the <__functional_03> include to the bottom of . This makes it easier to see how <__functional_03> interacts with - Remove a commented out implementation of bind in C++03. It's never going to get implemented. - Mark almost all std::bind tests as unsupported in C++03. std::is_placeholder works in C++03 and C++11. std::is_bind_expression is provided in C++03 but always returns false. llvm-svn: 242870 --- .../func.bind.isbind/is_bind_expression.pass.cpp | 2 ++ .../is_bind_expression_03.pass.cpp | 39 ++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression_03.pass.cpp (limited to 'libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind') diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression.pass.cpp index 7f8dd4a98d2..83fa452fecb 100644 --- a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression.pass.cpp @@ -7,6 +7,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03 + // // template struct is_bind_expression diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression_03.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression_03.pass.cpp new file mode 100644 index 00000000000..12a78dbc754 --- /dev/null +++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression_03.pass.cpp @@ -0,0 +1,39 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// + +//----------------------------------------------------------------------------- +// TESTING template struct is_bind_expression +// +// bind is not implemented in C++03 so nothing is a bind expression. However +// for compatibility reasons the trait is_bind_expression should be available +// in C++03 and it should always return false. + +#include + +template +void test() { + static_assert(!std::is_bind_expression::value, ""); +} + +struct C {}; + +int main() { + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); +} -- cgit v1.2.3