mirror of
https://github.com/llvm-mirror/libcxx.git
synced 2025-10-23 01:18:52 +08:00

Summary: http://llvm.org/PR39606 Reviewers: Quuxplusone Subscribers: christof, dexonsmith, libcxx-commits Differential Revision: https://reviews.llvm.org/D54410 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@366484 91177308-0d34-0410-b5e6-96231b3b80d8
35 lines
1.3 KiB
C++
35 lines
1.3 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// 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<class F>
|
|
// function(F) -> function<see-below>;
|
|
|
|
// UNSUPPORTED: c++98, c++03, c++11, c++14
|
|
// UNSUPPORTED: libcpp-no-deduction-guides
|
|
|
|
// The deduction guides for std::function do not handle rvalue-ref qualified
|
|
// call operators and C-style variadics. It also doesn't deduce from nullptr_t.
|
|
// Make sure we stick to the specification.
|
|
|
|
#include <functional>
|
|
#include <type_traits>
|
|
|
|
|
|
struct R { };
|
|
struct f0 { R operator()() && { return {}; } };
|
|
struct f1 { R operator()(int, ...) { return {}; } };
|
|
|
|
int main() {
|
|
std::function f = f0{}; // expected-error{{no viable constructor or deduction guide for deduction of template arguments of 'function'}}
|
|
std::function g = f1{}; // expected-error{{no viable constructor or deduction guide for deduction of template arguments of 'function'}}
|
|
std::function h = nullptr; // expected-error{{no viable constructor or deduction guide for deduction of template arguments of 'function'}}
|
|
}
|