1 // { dg-do compile } 2 // { dg-options "-std=gnu++0x" } 3 4 // Copyright (C) 2010-2014 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 // { dg-error "static assertion failed" "" { target *-*-* } 89 } 22 23 #include <list> 24 25 template <class T> 26 struct C 27 { 28 T t_; 29 30 template <class U, 31 class = typename std::enable_if 32 < 33 !std::is_lvalue_reference<U>::value 34 >::type> CC35 C(U&& u) : t_(std::forward<T>(std::move(u).get())) {} 36 }; 37 38 class A 39 { 40 int data_; 41 public: 42 explicit A(int data=1)43 A(int data = 1) 44 : data_(data) { } 45 ~A()46 ~A() { data_ = -1; } 47 test() const48 void test() const 49 { 50 __builtin_abort(); 51 } 52 }; 53 54 class Awrap 55 { 56 const A& a_; 57 public: Awrap(const A & a)58 explicit Awrap(const A& a) : a_(a) {} get() const59 const A /* & */ get() const { return a_; } 60 }; 61 62 template <class C> test(C c)63 void test(C c) 64 { 65 c.t_.test(); 66 } 67 68 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2951.html 69 // Test C. main()70int main() 71 { 72 std::list<C<const A&> > list; 73 A a(3); 74 C<const A&> c((Awrap(a))); 75 list.push_back(c); 76 test(c); 77 test(list.front()); 78 } 79