Fixing whitespace problems
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@111767 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1 +1,80 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// check for deriving from binary_function
|
||||
|
||||
#include <functional>
|
||||
#include <type_traits>
|
||||
|
||||
class functor1
|
||||
: public std::unary_function<int, char>
|
||||
{
|
||||
};
|
||||
|
||||
class functor2
|
||||
: public std::binary_function<char, int, double>
|
||||
{
|
||||
};
|
||||
|
||||
class functor3
|
||||
: public std::unary_function<int, int>,
|
||||
public std::binary_function<char, int, double>
|
||||
{
|
||||
public:
|
||||
typedef float result_type;
|
||||
};
|
||||
|
||||
class functor4
|
||||
: public std::unary_function<int, int>,
|
||||
public std::binary_function<char, int, double>
|
||||
{
|
||||
public:
|
||||
};
|
||||
|
||||
struct C
|
||||
{
|
||||
typedef int argument_type;
|
||||
typedef int result_type;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
static_assert((!std::is_base_of<std::binary_function<int, char, int>,
|
||||
std::reference_wrapper<functor1> >::value), "");
|
||||
static_assert((std::is_base_of<std::binary_function<char, int, double>,
|
||||
std::reference_wrapper<functor2> >::value), "");
|
||||
static_assert((std::is_base_of<std::binary_function<char, int, double>,
|
||||
std::reference_wrapper<functor3> >::value), "");
|
||||
static_assert((std::is_base_of<std::binary_function<char, int, double>,
|
||||
std::reference_wrapper<functor4> >::value), "");
|
||||
static_assert((!std::is_base_of<std::binary_function<int, int, int>,
|
||||
std::reference_wrapper<C> >::value), "");
|
||||
static_assert((!std::is_base_of<std::binary_function<int, int, float>,
|
||||
std::reference_wrapper<float ()> >::value), "");
|
||||
static_assert((!std::is_base_of<std::binary_function<int, int, float>,
|
||||
std::reference_wrapper<float (int)> >::value), "");
|
||||
static_assert((std::is_base_of<std::binary_function<int, int, float>,
|
||||
std::reference_wrapper<float (int, int)> >::value), "");
|
||||
static_assert((!std::is_base_of<std::binary_function<int, int, float>,
|
||||
std::reference_wrapper<float(*)()> >::value), "");
|
||||
static_assert((!std::is_base_of<std::binary_function<int, int, float>,
|
||||
std::reference_wrapper<float(*)(int)> >::value), "");
|
||||
static_assert((std::is_base_of<std::binary_function<int, int, float>,
|
||||
std::reference_wrapper<float(*)(int, int)> >::value), "");
|
||||
static_assert((!std::is_base_of<std::binary_function<C*, int, float>,
|
||||
std::reference_wrapper<float(C::*)()> >::value), "");
|
||||
static_assert((std::is_base_of<std::binary_function<C*, int, float>,
|
||||
std::reference_wrapper<float(C::*)(int)> >::value), "");
|
||||
static_assert((std::is_base_of<std::binary_function<const volatile C*, int, float>,
|
||||
std::reference_wrapper<float(C::*)(int) const volatile> >::value), "");
|
||||
}
|
||||
|
@@ -1 +1,46 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// operator T& () const;
|
||||
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
|
||||
class functor1
|
||||
: public std::unary_function<int, char>
|
||||
{
|
||||
};
|
||||
|
||||
template <class T>
|
||||
void
|
||||
test(T& t)
|
||||
{
|
||||
std::reference_wrapper<T> r(t);
|
||||
T& r2 = r;
|
||||
assert(&r2 == &t);
|
||||
}
|
||||
|
||||
void f() {}
|
||||
|
||||
int main()
|
||||
{
|
||||
void (*fp)() = f;
|
||||
test(fp);
|
||||
test(f);
|
||||
functor1 f1;
|
||||
test(f1);
|
||||
int i = 0;
|
||||
test(i);
|
||||
const int j = 0;
|
||||
test(j);
|
||||
}
|
||||
|
@@ -1 +1,58 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// reference_wrapper& operator=(const reference_wrapper<T>& x);
|
||||
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
|
||||
class functor1
|
||||
: public std::unary_function<int, char>
|
||||
{
|
||||
};
|
||||
|
||||
template <class T>
|
||||
void
|
||||
test(T& t)
|
||||
{
|
||||
std::reference_wrapper<T> r(t);
|
||||
T t2 = t;
|
||||
std::reference_wrapper<T> r2(t2);
|
||||
r2 = r;
|
||||
assert(&r2.get() == &t);
|
||||
}
|
||||
|
||||
void f() {}
|
||||
void g() {}
|
||||
|
||||
void
|
||||
test_function()
|
||||
{
|
||||
std::reference_wrapper<void ()> r(f);
|
||||
std::reference_wrapper<void ()> r2(g);
|
||||
r2 = r;
|
||||
assert(&r2.get() == &f);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
void (*fp)() = f;
|
||||
test(fp);
|
||||
test_function();
|
||||
functor1 f1;
|
||||
test(f1);
|
||||
int i = 0;
|
||||
test(i);
|
||||
const int j = 0;
|
||||
test(j);
|
||||
}
|
||||
|
@@ -1 +1,46 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// reference_wrapper(const reference_wrapper<T>& x);
|
||||
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
|
||||
class functor1
|
||||
: public std::unary_function<int, char>
|
||||
{
|
||||
};
|
||||
|
||||
template <class T>
|
||||
void
|
||||
test(T& t)
|
||||
{
|
||||
std::reference_wrapper<T> r(t);
|
||||
std::reference_wrapper<T> r2 = r;
|
||||
assert(&r2.get() == &t);
|
||||
}
|
||||
|
||||
void f() {}
|
||||
|
||||
int main()
|
||||
{
|
||||
void (*fp)() = f;
|
||||
test(fp);
|
||||
test(f);
|
||||
functor1 f1;
|
||||
test(f1);
|
||||
int i = 0;
|
||||
test(i);
|
||||
const int j = 0;
|
||||
test(j);
|
||||
}
|
||||
|
@@ -1 +1,22 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// reference_wrapper(T&&) = delete;
|
||||
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
|
||||
int main()
|
||||
{
|
||||
std::reference_wrapper<const int> r(3);
|
||||
}
|
||||
|
@@ -1 +1,45 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// reference_wrapper(T& t);
|
||||
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
|
||||
class functor1
|
||||
: public std::unary_function<int, char>
|
||||
{
|
||||
};
|
||||
|
||||
template <class T>
|
||||
void
|
||||
test(T& t)
|
||||
{
|
||||
std::reference_wrapper<T> r(t);
|
||||
assert(&r.get() == &t);
|
||||
}
|
||||
|
||||
void f() {}
|
||||
|
||||
int main()
|
||||
{
|
||||
void (*fp)() = f;
|
||||
test(fp);
|
||||
test(f);
|
||||
functor1 f1;
|
||||
test(f1);
|
||||
int i = 0;
|
||||
test(i);
|
||||
const int j = 0;
|
||||
test(j);
|
||||
}
|
||||
|
@@ -1 +1,24 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// template <ObjectType T> reference_wrapper<const T> cref(const T& t);
|
||||
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
|
||||
int main()
|
||||
{
|
||||
int i = 0;
|
||||
std::reference_wrapper<const int> r = std::cref(i);
|
||||
assert(&r.get() == &i);
|
||||
}
|
||||
|
@@ -1 +1,25 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// template <ObjectType T> reference_wrapper<const T> cref(reference_wrapper<T> t);
|
||||
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
|
||||
int main()
|
||||
{
|
||||
const int i = 0;
|
||||
std::reference_wrapper<const int> r1 = std::cref(i);
|
||||
std::reference_wrapper<const int> r2 = std::cref(r1);
|
||||
assert(&r2.get() == &i);
|
||||
}
|
||||
|
@@ -1 +1,27 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// template <ObjectType T> reference_wrapper<T> ref(T& t);
|
||||
|
||||
// Don't allow binding to a temp
|
||||
|
||||
#include <functional>
|
||||
|
||||
struct A {};
|
||||
|
||||
const A source() {return A();}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::reference_wrapper<const A> r = std::ref(source());
|
||||
}
|
||||
|
@@ -1 +1,24 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// template <ObjectType T> reference_wrapper<T> ref(T& t);
|
||||
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
|
||||
int main()
|
||||
{
|
||||
int i = 0;
|
||||
std::reference_wrapper<int> r = std::ref(i);
|
||||
assert(&r.get() == &i);
|
||||
}
|
||||
|
@@ -1 +1,25 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// template <ObjectType T> reference_wrapper<T> ref(reference_wrapper<T>t);
|
||||
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
|
||||
int main()
|
||||
{
|
||||
int i = 0;
|
||||
std::reference_wrapper<int> r1 = std::ref(i);
|
||||
std::reference_wrapper<int> r2 = std::ref(r1);
|
||||
assert(&r2.get() == &i);
|
||||
}
|
||||
|
@@ -1 +1,52 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// template <class... ArgTypes>
|
||||
// requires Callable<T, ArgTypes&&...>
|
||||
// Callable<T, ArgTypes&&...>::result_type
|
||||
// operator()(ArgTypes&&... args) const;
|
||||
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
|
||||
// member data pointer: cv qualifiers should transfer from argument to return type
|
||||
|
||||
struct A_int_1
|
||||
{
|
||||
A_int_1() : data_(5) {}
|
||||
|
||||
int data_;
|
||||
};
|
||||
|
||||
void
|
||||
test_int_1()
|
||||
{
|
||||
// member data pointer
|
||||
{
|
||||
int A_int_1::*fp = &A_int_1::data_;
|
||||
std::reference_wrapper<int A_int_1::*> r1(fp);
|
||||
A_int_1 a;
|
||||
assert(r1(a) == 5);
|
||||
r1(a) = 6;
|
||||
assert(r1(a) == 6);
|
||||
const A_int_1* ap = &a;
|
||||
assert(r1(ap) == 6);
|
||||
r1(ap) = 7;
|
||||
assert(r1(ap) == 7);
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test_int_1();
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@@ -1 +1,76 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// template <class... ArgTypes>
|
||||
// requires Callable<T, ArgTypes&&...>
|
||||
// Callable<T, ArgTypes&&...>::result_type
|
||||
// operator()(ArgTypes&&... args) const;
|
||||
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
|
||||
// 0 args, return int
|
||||
|
||||
int count = 0;
|
||||
|
||||
int f_int_0()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
struct A_int_0
|
||||
{
|
||||
int operator()() {return 4;}
|
||||
};
|
||||
|
||||
void
|
||||
test_int_0()
|
||||
{
|
||||
// function
|
||||
{
|
||||
std::reference_wrapper<int ()> r1(f_int_0);
|
||||
assert(r1() == 3);
|
||||
}
|
||||
// function pointer
|
||||
{
|
||||
int (*fp)() = f_int_0;
|
||||
std::reference_wrapper<int (*)()> r1(fp);
|
||||
assert(r1() == 3);
|
||||
}
|
||||
// functor
|
||||
{
|
||||
A_int_0 a0;
|
||||
std::reference_wrapper<A_int_0> r1(a0);
|
||||
assert(r1() == 4);
|
||||
}
|
||||
}
|
||||
|
||||
// 1 arg, return void
|
||||
|
||||
void f_void_1(int i)
|
||||
{
|
||||
count += i;
|
||||
}
|
||||
|
||||
struct A_void_1
|
||||
{
|
||||
void operator()(int i)
|
||||
{
|
||||
count += i;
|
||||
}
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
test_int_0();
|
||||
}
|
||||
|
@@ -1 +1,68 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// template <class... ArgTypes>
|
||||
// requires Callable<T, ArgTypes&&...>
|
||||
// Callable<T, ArgTypes&&...>::result_type
|
||||
// operator()(ArgTypes&&... args) const;
|
||||
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
|
||||
// 0 args, return void
|
||||
|
||||
int count = 0;
|
||||
|
||||
void f_void_0()
|
||||
{
|
||||
++count;
|
||||
}
|
||||
|
||||
struct A_void_0
|
||||
{
|
||||
void operator()() {++count;}
|
||||
};
|
||||
|
||||
void
|
||||
test_void_0()
|
||||
{
|
||||
int save_count = count;
|
||||
// function
|
||||
{
|
||||
std::reference_wrapper<void ()> r1(f_void_0);
|
||||
r1();
|
||||
assert(count == save_count+1);
|
||||
save_count = count;
|
||||
}
|
||||
// function pointer
|
||||
{
|
||||
void (*fp)() = f_void_0;
|
||||
std::reference_wrapper<void (*)()> r1(fp);
|
||||
r1();
|
||||
assert(count == save_count+1);
|
||||
save_count = count;
|
||||
}
|
||||
// functor
|
||||
{
|
||||
A_void_0 a0;
|
||||
std::reference_wrapper<A_void_0> r1(a0);
|
||||
r1();
|
||||
assert(count == save_count+1);
|
||||
save_count = count;
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test_void_0();
|
||||
}
|
||||
|
@@ -1 +1,37 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// check for member typedef type
|
||||
|
||||
#include <functional>
|
||||
#include <type_traits>
|
||||
|
||||
class C {};
|
||||
|
||||
int main()
|
||||
{
|
||||
static_assert((std::is_same<std::reference_wrapper<C>::type,
|
||||
C>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<void ()>::type,
|
||||
void ()>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<int* (double*)>::type,
|
||||
int* (double*)>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<void(*)()>::type,
|
||||
void(*)()>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<int*(*)(double*)>::type,
|
||||
int*(*)(double*)>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<int*(C::*)(double*)>::type,
|
||||
int*(C::*)(double*)>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<int (C::*)(double*) const volatile>::type,
|
||||
int (C::*)(double*) const volatile>::value), "");
|
||||
}
|
||||
|
@@ -1 +1,78 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// check for deriving from unary_function
|
||||
|
||||
#include <functional>
|
||||
#include <type_traits>
|
||||
|
||||
class functor1
|
||||
: public std::unary_function<int, char>
|
||||
{
|
||||
};
|
||||
|
||||
class functor2
|
||||
: public std::binary_function<char, int, double>
|
||||
{
|
||||
};
|
||||
|
||||
class functor3
|
||||
: public std::unary_function<int, int>,
|
||||
public std::binary_function<char, int, double>
|
||||
{
|
||||
public:
|
||||
typedef float result_type;
|
||||
};
|
||||
|
||||
class functor4
|
||||
: public std::unary_function<int, int>,
|
||||
public std::binary_function<char, int, double>
|
||||
{
|
||||
public:
|
||||
};
|
||||
|
||||
struct C
|
||||
{
|
||||
typedef int argument_type;
|
||||
typedef int result_type;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
static_assert((std::is_base_of<std::unary_function<int, char>,
|
||||
std::reference_wrapper<functor1> >::value), "");
|
||||
static_assert((!std::is_base_of<std::unary_function<char, int>,
|
||||
std::reference_wrapper<functor2> >::value), "");
|
||||
static_assert((std::is_base_of<std::unary_function<int, int>,
|
||||
std::reference_wrapper<functor3> >::value), "");
|
||||
static_assert((std::is_base_of<std::unary_function<int, int>,
|
||||
std::reference_wrapper<functor4> >::value), "");
|
||||
static_assert((!std::is_base_of<std::unary_function<int, int>,
|
||||
std::reference_wrapper<C> >::value), "");
|
||||
static_assert((!std::is_base_of<std::unary_function<int, float>,
|
||||
std::reference_wrapper<float(*)()> >::value), "");
|
||||
static_assert((std::is_base_of<std::unary_function<int, float>,
|
||||
std::reference_wrapper<float (int)> >::value), "");
|
||||
static_assert((!std::is_base_of<std::unary_function<int, float>,
|
||||
std::reference_wrapper<float (int, int)> >::value), "");
|
||||
static_assert((std::is_base_of<std::unary_function<int, float>,
|
||||
std::reference_wrapper<float(*)(int)> >::value), "");
|
||||
static_assert((!std::is_base_of<std::unary_function<int, float>,
|
||||
std::reference_wrapper<float(*)(int, int)> >::value), "");
|
||||
static_assert((std::is_base_of<std::unary_function<C*, float>,
|
||||
std::reference_wrapper<float(C::*)()> >::value), "");
|
||||
static_assert((std::is_base_of<std::unary_function<const volatile C*, float>,
|
||||
std::reference_wrapper<float(C::*)() const volatile> >::value), "");
|
||||
static_assert((!std::is_base_of<std::unary_function<C*, float>,
|
||||
std::reference_wrapper<float(C::*)(int)> >::value), "");
|
||||
}
|
||||
|
@@ -1 +1,82 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <functional>
|
||||
|
||||
// reference_wrapper
|
||||
|
||||
// has weak result type
|
||||
|
||||
#include <functional>
|
||||
#include <type_traits>
|
||||
|
||||
class functor1
|
||||
: public std::unary_function<int, char>
|
||||
{
|
||||
};
|
||||
|
||||
class functor2
|
||||
: public std::binary_function<char, int, double>
|
||||
{
|
||||
};
|
||||
|
||||
class functor3
|
||||
: public std::unary_function<char, int>,
|
||||
public std::binary_function<char, int, double>
|
||||
{
|
||||
public:
|
||||
typedef float result_type;
|
||||
};
|
||||
|
||||
class functor4
|
||||
: public std::unary_function<char, int>,
|
||||
public std::binary_function<char, int, double>
|
||||
{
|
||||
public:
|
||||
};
|
||||
|
||||
class C {};
|
||||
|
||||
template <class T>
|
||||
struct has_result_type
|
||||
{
|
||||
private:
|
||||
struct two {char _; char __;};
|
||||
template <class U> static two test(...);
|
||||
template <class U> static char test(typename U::result_type* = 0);
|
||||
public:
|
||||
static const bool value = sizeof(test<T>(0)) == 1;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
static_assert((std::is_same<std::reference_wrapper<functor1>::result_type,
|
||||
char>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<functor2>::result_type,
|
||||
double>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<functor3>::result_type,
|
||||
float>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<void()>::result_type,
|
||||
void>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<int*(double*)>::result_type,
|
||||
int*>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<void(*)()>::result_type,
|
||||
void>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<int*(*)(double*)>::result_type,
|
||||
int*>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<int*(C::*)(double*)>::result_type,
|
||||
int*>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<int (C::*)(double*) const volatile>::result_type,
|
||||
int>::value), "");
|
||||
static_assert((std::is_same<std::reference_wrapper<C()>::result_type,
|
||||
C>::value), "");
|
||||
static_assert(has_result_type<std::reference_wrapper<functor3> >::value, "");
|
||||
static_assert(!has_result_type<std::reference_wrapper<functor4> >::value, "");
|
||||
static_assert(!has_result_type<std::reference_wrapper<C> >::value, "");
|
||||
}
|
||||
|
Reference in New Issue
Block a user