diff options
| author | Howard Hinnant <hhinnant@apple.com> | 2013-06-30 19:48:15 +0000 |
|---|---|---|
| committer | Howard Hinnant <hhinnant@apple.com> | 2013-06-30 19:48:15 +0000 |
| commit | 9bf42533b7d8db7f7b0b44ad8ba28a4d0e15ab08 (patch) | |
| tree | 7e944077dbd2f226dfe606151928bc9739c62f6b /libcxx/test | |
| parent | 851b025e964097b58e46856d8b0f946cd54cb4a1 (diff) | |
| download | bcm5719-llvm-9bf42533b7d8db7f7b0b44ad8ba28a4d0e15ab08.tar.gz bcm5719-llvm-9bf42533b7d8db7f7b0b44ad8ba28a4d0e15ab08.zip | |
Fix bind by making _is_valid_bind_return more robust. It should return false instead of give a compile time error, always. The problem was down in ____mu_return, the version that handles nested bind objects. This fixes http://llvm.org/bugs/show_bug.cgi?id=16343
llvm-svn: 185289
Diffstat (limited to 'libcxx/test')
| -rw-r--r-- | libcxx/test/utilities/function.objects/bind/func.bind/func.bind.bind/nested.pass.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/libcxx/test/utilities/function.objects/bind/func.bind/func.bind.bind/nested.pass.cpp b/libcxx/test/utilities/function.objects/bind/func.bind/func.bind.bind/nested.pass.cpp new file mode 100644 index 00000000000..12720f7b550 --- /dev/null +++ b/libcxx/test/utilities/function.objects/bind/func.bind/func.bind.bind/nested.pass.cpp @@ -0,0 +1,51 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <functional> + +// template<CopyConstructible Fn, CopyConstructible... Types> +// unspecified bind(Fn, Types...); +// template<Returnable R, CopyConstructible Fn, CopyConstructible... Types> +// unspecified bind(Fn, Types...); + +// http://llvm.org/bugs/show_bug.cgi?id=16343 + +#include <cmath> +#include <functional> +#include <cassert> + +struct power +{ + template <typename T> + T + operator()(T a, T b) + { + return std::pow(a, b); + } +}; + +struct plus_one +{ + template <typename T> + T + operator()(T a) + { + return a + 1; + } +}; + +int +main() +{ + using std::placeholders::_1; + + auto g = std::bind(power(), 2, _1); + assert(g(5) == 32); + assert(std::bind(plus_one(), g)(5) == 33); +} |

