1// { dg-do compile }
2// { dg-options " -std=gnu++11 " }
3
4// Copyright (C) 2014-2015 Free Software Foundation, Inc.
5//
6// This file is part of the GNU ISO C++ Library.  This library is free
7// software; you can redistribute it and/or modify it under the
8// terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 3, or (at your option)
10// any later version.
11
12// This library is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15// GNU General Public License for more details.
16
17// You should have received a copy of the GNU General Public License along
18// with this library; see the file COPYING3.  If not see
19// <http://www.gnu.org/licenses/>.
20
21// libstdc++/60497
22
23#include <mutex>
24#include <memory>
25
26struct A;
27template<typename  T> struct B { T t; };
28
29template<typename Dummy>
30struct Lockable
31{
32  void lock();
33  void unlock();
34  bool try_lock();
35};
36
37using test_type = Lockable<std::unique_ptr<B<A>>>;
38
39void test01()
40{
41  test_type l;
42  std::unique_lock<test_type> ul(l);
43}
44
45void test02()
46{
47  test_type l1, l2, l3;
48  std::lock(l1, l2, l3);
49}
50