1// { dg-options "-std=gnu++11" } 2// { dg-do compile } 3 4// Copyright (C) 2012-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#include <type_traits> 22#include <memory> 23 24using std::is_same; 25using std::result_of; 26using std::unique_ptr; 27 28// Taken from example in [meta.trans.other] 29 30typedef bool (&PF1)(); 31typedef short (*PF2)(long); 32struct S { 33 operator PF2() const; 34 double operator()(char, int&); 35 void fn(long) const; 36 char data; 37}; 38 39typedef void (S::*PMF)(long) const; 40typedef char S::*PMD; 41 42static_assert( is_same<result_of<S(int)>::type, short>::value, "!"); 43static_assert( is_same<result_of<S&(unsigned char, int&)>::type, double>::value, "!"); 44static_assert( is_same<result_of<PF1()>::type, bool>::value, "!"); 45static_assert( is_same<result_of<PMF(unique_ptr<S>, int)>::type, void>::value, "!"); 46static_assert( is_same<result_of<PMD(S)>::type, char&&>::value, "!"); 47static_assert( is_same<result_of<PMD(const S*)>::type, const char&>::value, "!"); 48