Author: ericwf Date: Fri Jul 17 17:27:43 2015 New Revision: 242581 URL: http://llvm.org/viewvc/llvm-project?rev=242581&view=rev Log: Cleanup tests that fail in C++1z and with Clang 3.8
Removed: libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/no-variadics.pass.cpp libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_int_0.pass.cpp libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_no_variadics.pass.cpp libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_void_0.pass.cpp Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F.pass.cpp libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.fail.cpp libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.pass.cpp Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp?rev=242581&r1=242580&r2=242581&view=diff ============================================================================== --- libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp (original) +++ libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp Fri Jul 17 17:27:43 2015 @@ -11,11 +11,10 @@ // UNSUPPORTED: sanitizer-new-delete, c++98, c++03, c++11 -// TODO: Clang does not enable sized-deallocation in c++14 and beyond by +// NOTE: Clang does not enable sized-deallocation in c++14 and beyond by // default. It is only enabled when -fsized-deallocation is given. -// (except clang-3.6 which temporarly enabled sized-deallocation) -// XFAIL: clang-3.4, clang-3.5, clang-3.7, clang-3.8 -// XFAIL: apple-clang +// (except clang-3.6 which temporarily enabled sized-deallocation) +// UNSUPPORTED: clang, apple-clang // NOTE: GCC 4.9.1 does not support sized-deallocation in c++14. However // GCC 5.1 does. Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp?rev=242581&r1=242580&r2=242581&view=diff ============================================================================== --- libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp (original) +++ libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp Fri Jul 17 17:27:43 2015 @@ -11,11 +11,10 @@ // UNSUPPORTED: sanitizer-new-delete, c++98, c++03, c++11 -// TODO: Clang does not enable sized-deallocation in c++14 and beyond by +// NOTE: Clang does not enable sized-deallocation in c++14 and beyond by // default. It is only enabled when -fsized-deallocation is given. -// (except clang-3.6 which temporarly enabled sized-deallocation) -// XFAIL: clang-3.4, clang-3.5, clang-3.7, clang-3.8 -// XFAIL: apple-clang +// (except clang-3.6 which temporarily enabled sized-deallocation) +// UNSUPPORTED: clang, apple-clang // NOTE: GCC 4.9.1 does not support sized-deallocation in c++14. However // GCC 5.1 does. Modified: libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F.pass.cpp?rev=242581&r1=242580&r2=242581&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F.pass.cpp Fri Jul 17 17:27:43 2015 @@ -11,7 +11,7 @@ // class function<R(ArgTypes...)> -// function(nullptr_t); +// function(F); #include <functional> #include <cassert> @@ -87,4 +87,8 @@ int main() assert(f.target<int(*)(int)>() != 0); f(1); } + { + std::function <void()> f(static_cast<void (*)()>(0)); + assert(!f); + } } Removed: libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/no-variadics.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/no-variadics.pass.cpp?rev=242580&view=auto ============================================================================== --- libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/no-variadics.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/no-variadics.pass.cpp (removed) @@ -1,24 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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> - -// class function<R()> - -// template<class F> function(F); - -#define _LIBCPP_HAS_NO_VARIADICS -#include <functional> -#include <cassert> - -int main() -{ - std::function<void()> f(static_cast<void(*)()>(0)); - assert(!f); -} Modified: libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.fail.cpp?rev=242581&r1=242580&r2=242581&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.fail.cpp (original) +++ libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.fail.cpp Fri Jul 17 17:27:43 2015 @@ -30,13 +30,13 @@ test_int_1() { // member data pointer { - int A_int_1::*fp = &A_int_1::data_; - A_int_1 a; - std::function<int& (const A_int_1*)> r2(fp); - const A_int_1* ap = &a; - assert(r2(ap) == 6); - r2(ap) = 7; - assert(r2(ap) == 7); + int A_int_1::*fp = &A_int_1::data_; + A_int_1 a; + std::function<int& (const A_int_1*)> r2(fp); + const A_int_1* ap = &a; + assert(r2(ap) == 6); + r2(ap) = 7; + assert(r2(ap) == 7); } } Modified: libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.pass.cpp?rev=242581&r1=242580&r2=242581&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.pass.cpp Fri Jul 17 17:27:43 2015 @@ -16,8 +16,85 @@ #include <functional> #include <cassert> + int count = 0; + +// 0 args, return int + +int f_int_0() +{ + return 3; +} + +struct A_int_0 +{ + int operator()() {return 4;} +}; + +void test_int_0() +{ + // function + { + std::function<int ()> r1(f_int_0); + assert(r1() == 3); + } + // function pointer + { + int (*fp)() = f_int_0; + std::function<int ()> r1(fp); + assert(r1() == 3); + } + // functor + { + A_int_0 a0; + std::function<int ()> r1(a0); + assert(r1() == 4); + } +} + + +// 0 args, return void + +void f_void_0() +{ + ++count; +} + +struct A_void_0 +{ + void operator()() {++count;} +}; + +void +test_void_0() +{ + int save_count = count; + // function + { + std::function<void ()> r1(f_void_0); + r1(); + assert(count == save_count+1); + save_count = count; + } + // function pointer + { + void (*fp)() = f_void_0; + std::function<void ()> r1(fp); + r1(); + assert(count == save_count+1); + save_count = count; + } + // functor + { + A_void_0 a0; + std::function<void ()> r1(a0); + r1(); + assert(count == save_count+1); + save_count = count; + } +} + // 1 arg, return void void f_void_1(int i) @@ -42,57 +119,57 @@ test_void_1() int save_count = count; // function { - std::function<void (int)> r1(f_void_1); - int i = 2; - r1(i); - assert(count == save_count+2); - save_count = count; + std::function<void (int)> r1(f_void_1); + int i = 2; + r1(i); + assert(count == save_count+2); + save_count = count; } // function pointer { - void (*fp)(int) = f_void_1; - std::function<void (int)> r1(fp); - int i = 3; - r1(i); - assert(count == save_count+3); - save_count = count; + void (*fp)(int) = f_void_1; + std::function<void (int)> r1(fp); + int i = 3; + r1(i); + assert(count == save_count+3); + save_count = count; } // functor { - A_void_1 a0; - std::function<void (int)> r1(a0); - int i = 4; - r1(i); - assert(count == save_count+4); - save_count = count; + A_void_1 a0; + std::function<void (int)> r1(a0); + int i = 4; + r1(i); + assert(count == save_count+4); + save_count = count; } // member function pointer { - void (A_void_1::*fp)() = &A_void_1::mem1; - std::function<void (A_void_1)> r1(fp); - A_void_1 a; - r1(a); - assert(count == save_count+1); - save_count = count; - A_void_1* ap = &a; - std::function<void (A_void_1*)> r2 = fp; - r2(ap); - assert(count == save_count+1); - save_count = count; + void (A_void_1::*fp)() = &A_void_1::mem1; + std::function<void (A_void_1)> r1(fp); + A_void_1 a; + r1(a); + assert(count == save_count+1); + save_count = count; + A_void_1* ap = &a; + std::function<void (A_void_1*)> r2 = fp; + r2(ap); + assert(count == save_count+1); + save_count = count; } // const member function pointer { - void (A_void_1::*fp)() const = &A_void_1::mem2; - std::function<void (A_void_1)> r1(fp); - A_void_1 a; - r1(a); - assert(count == save_count+1); - save_count = count; - std::function<void (A_void_1*)> r2(fp); - A_void_1* ap = &a; - r2(ap); - assert(count == save_count+1); - save_count = count; + void (A_void_1::*fp)() const = &A_void_1::mem2; + std::function<void (A_void_1)> r1(fp); + A_void_1 a; + r1(a); + assert(count == save_count+1); + save_count = count; + std::function<void (A_void_1*)> r2(fp); + A_void_1* ap = &a; + r2(ap); + assert(count == save_count+1); + save_count = count; } } @@ -121,57 +198,57 @@ test_int_1() { // function { - std::function<int (int)> r1(f_int_1); - int i = 2; - assert(r1(i) == 3); + std::function<int (int)> r1(f_int_1); + int i = 2; + assert(r1(i) == 3); } // function pointer { - int (*fp)(int) = f_int_1; - std::function<int (int)> r1(fp); - int i = 3; - assert(r1(i) == 4); + int (*fp)(int) = f_int_1; + std::function<int (int)> r1(fp); + int i = 3; + assert(r1(i) == 4); } // functor { - A_int_1 a0; - std::function<int (int)> r1(a0); - int i = 4; - assert(r1(i) == 3); + A_int_1 a0; + std::function<int (int)> r1(a0); + int i = 4; + assert(r1(i) == 3); } // member function pointer { - int (A_int_1::*fp)() = &A_int_1::mem1; - std::function<int (A_int_1)> r1(fp); - A_int_1 a; - assert(r1(a) == 3); - std::function<int (A_int_1*)> r2(fp); - A_int_1* ap = &a; - assert(r2(ap) == 3); + int (A_int_1::*fp)() = &A_int_1::mem1; + std::function<int (A_int_1)> r1(fp); + A_int_1 a; + assert(r1(a) == 3); + std::function<int (A_int_1*)> r2(fp); + A_int_1* ap = &a; + assert(r2(ap) == 3); } // const member function pointer { - int (A_int_1::*fp)() const = &A_int_1::mem2; - std::function<int (A_int_1)> r1(fp); - A_int_1 a; - assert(r1(a) == 4); - std::function<int (A_int_1*)> r2(fp); - A_int_1* ap = &a; - assert(r2(ap) == 4); + int (A_int_1::*fp)() const = &A_int_1::mem2; + std::function<int (A_int_1)> r1(fp); + A_int_1 a; + assert(r1(a) == 4); + std::function<int (A_int_1*)> r2(fp); + A_int_1* ap = &a; + assert(r2(ap) == 4); } // member data pointer { - int A_int_1::*fp = &A_int_1::data_; - std::function<int& (A_int_1&)> r1(fp); - A_int_1 a; - assert(r1(a) == 5); - r1(a) = 6; - assert(r1(a) == 6); - std::function<int& (A_int_1*)> r2(fp); - A_int_1* ap = &a; - assert(r2(ap) == 6); - r2(ap) = 7; - assert(r2(ap) == 7); + int A_int_1::*fp = &A_int_1::data_; + std::function<int& (A_int_1&)> r1(fp); + A_int_1 a; + assert(r1(a) == 5); + r1(a) = 6; + assert(r1(a) == 6); + std::function<int& (A_int_1*)> r2(fp); + A_int_1* ap = &a; + assert(r2(ap) == 6); + r2(ap) = 7; + assert(r2(ap) == 7); } } @@ -199,62 +276,62 @@ test_void_2() int save_count = count; // function { - std::function<void (int, int)> r1(f_void_2); - int i = 2; - int j = 3; - r1(i, j); - assert(count == save_count+5); - save_count = count; + std::function<void (int, int)> r1(f_void_2); + int i = 2; + int j = 3; + r1(i, j); + assert(count == save_count+5); + save_count = count; } // function pointer { - void (*fp)(int, int) = f_void_2; - std::function<void (int, int)> r1(fp); - int i = 3; - int j = 4; - r1(i, j); - assert(count == save_count+7); - save_count = count; + void (*fp)(int, int) = f_void_2; + std::function<void (int, int)> r1(fp); + int i = 3; + int j = 4; + r1(i, j); + assert(count == save_count+7); + save_count = count; } // functor { - A_void_2 a0; - std::function<void (int, int)> r1(a0); - int i = 4; - int j = 5; - r1(i, j); - assert(count == save_count+9); - save_count = count; + A_void_2 a0; + std::function<void (int, int)> r1(a0); + int i = 4; + int j = 5; + r1(i, j); + assert(count == save_count+9); + save_count = count; } // member function pointer { - void (A_void_2::*fp)(int) = &A_void_2::mem1; - std::function<void (A_void_2, int)> r1(fp); - A_void_2 a; - int i = 3; - r1(a, i); - assert(count == save_count+3); - save_count = count; - std::function<void (A_void_2*, int)> r2(fp); - A_void_2* ap = &a; - r2(ap, i); - assert(count == save_count+3); - save_count = count; + void (A_void_2::*fp)(int) = &A_void_2::mem1; + std::function<void (A_void_2, int)> r1(fp); + A_void_2 a; + int i = 3; + r1(a, i); + assert(count == save_count+3); + save_count = count; + std::function<void (A_void_2*, int)> r2(fp); + A_void_2* ap = &a; + r2(ap, i); + assert(count == save_count+3); + save_count = count; } // const member function pointer { - void (A_void_2::*fp)(int) const = &A_void_2::mem2; - std::function<void (A_void_2, int)> r1(fp); - A_void_2 a; - int i = 4; - r1(a, i); - assert(count == save_count+4); - save_count = count; - std::function<void (A_void_2*, int)> r2(fp); - A_void_2* ap = &a; - r2(ap, i); - assert(count == save_count+4); - save_count = count; + void (A_void_2::*fp)(int) const = &A_void_2::mem2; + std::function<void (A_void_2, int)> r1(fp); + A_void_2 a; + int i = 4; + r1(a, i); + assert(count == save_count+4); + save_count = count; + std::function<void (A_void_2*, int)> r2(fp); + A_void_2* ap = &a; + r2(ap, i); + assert(count == save_count+4); + save_count = count; } } @@ -276,60 +353,61 @@ struct A_int_2 int mem2(int i) const {return i+2;} }; -void -testint_2() +void test_int_2() { // function { - std::function<int (int, int)> r1(f_int_2); - int i = 2; - int j = 3; - assert(r1(i, j) == i+j); + std::function<int (int, int)> r1(f_int_2); + int i = 2; + int j = 3; + assert(r1(i, j) == i+j); } // function pointer { - int (*fp)(int, int) = f_int_2; - std::function<int (int, int)> r1(fp); - int i = 3; - int j = 4; - assert(r1(i, j) == i+j); + int (*fp)(int, int) = f_int_2; + std::function<int (int, int)> r1(fp); + int i = 3; + int j = 4; + assert(r1(i, j) == i+j); } // functor { - A_int_2 a0; - std::function<int (int, int)> r1(a0); - int i = 4; - int j = 5; - assert(r1(i, j) == i+j); + A_int_2 a0; + std::function<int (int, int)> r1(a0); + int i = 4; + int j = 5; + assert(r1(i, j) == i+j); } // member function pointer { - int(A_int_2::*fp)(int) = &A_int_2::mem1; - std::function<int (A_int_2, int)> r1(fp); - A_int_2 a; - int i = 3; - assert(r1(a, i) == i+1); - std::function<int (A_int_2*, int)> r2(fp); - A_int_2* ap = &a; - assert(r2(ap, i) == i+1); + int(A_int_2::*fp)(int) = &A_int_2::mem1; + std::function<int (A_int_2, int)> r1(fp); + A_int_2 a; + int i = 3; + assert(r1(a, i) == i+1); + std::function<int (A_int_2*, int)> r2(fp); + A_int_2* ap = &a; + assert(r2(ap, i) == i+1); } // const member function pointer { - int (A_int_2::*fp)(int) const = &A_int_2::mem2; - std::function<int (A_int_2, int)> r1(fp); - A_int_2 a; - int i = 4; - assert(r1(a, i) == i+2); - std::function<int (A_int_2*, int)> r2(fp); - A_int_2* ap = &a; - assert(r2(ap, i) == i+2); + int (A_int_2::*fp)(int) const = &A_int_2::mem2; + std::function<int (A_int_2, int)> r1(fp); + A_int_2 a; + int i = 4; + assert(r1(a, i) == i+2); + std::function<int (A_int_2*, int)> r2(fp); + A_int_2* ap = &a; + assert(r2(ap, i) == i+2); } } int main() { + test_void_0(); + test_int_0(); test_void_1(); test_int_1(); test_void_2(); - testint_2(); + test_int_2(); } Removed: libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_int_0.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_int_0.pass.cpp?rev=242580&view=auto ============================================================================== --- libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_int_0.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_int_0.pass.cpp (removed) @@ -1,58 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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> - -// class function<R(ArgTypes...)> - -// R 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::function<int ()> r1(f_int_0); - assert(r1() == 3); - } - // function pointer - { - int (*fp)() = f_int_0; - std::function<int ()> r1(fp); - assert(r1() == 3); - } - // functor - { - A_int_0 a0; - std::function<int ()> r1(a0); - assert(r1() == 4); - } -} - -int main() -{ - test_int_0(); -} Removed: libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_no_variadics.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_no_variadics.pass.cpp?rev=242580&view=auto ============================================================================== --- libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_no_variadics.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_no_variadics.pass.cpp (removed) @@ -1,60 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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> - -// class function<R()> - -// Test that we properly return both values and void for all non-variadic -// overloads of function::operator()(...) - -#define _LIBCPP_HAS_NO_VARIADICS -#include <functional> -#include <cassert> - -int foo0() { return 42; } -int foo1(int) { return 42; } -int foo2(int, int) { return 42; } -int foo3(int, int, int) { return 42; } - -int main() -{ - { - std::function<int()> f(&foo0); - assert(f() == 42); - } - { - std::function<int(int)> f(&foo1); - assert(f(1) == 42); - } - { - std::function<int(int, int)> f(&foo2); - assert(f(1, 1) == 42); - } - { - std::function<int(int, int, int)> f(&foo3); - assert(f(1, 1, 1) == 42); - } - { - std::function<void()> f(&foo0); - f(); - } - { - std::function<void(int)> f(&foo1); - f(1); - } - { - std::function<void(int, int)> f(&foo2); - f(1, 1); - } - { - std::function<void(int, int, int)> f(&foo3); - f(1, 1, 1); - } -} Removed: libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_void_0.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_void_0.pass.cpp?rev=242580&view=auto ============================================================================== --- libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_void_0.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_void_0.pass.cpp (removed) @@ -1,67 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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> - -// class function<R(ArgTypes...)> - -// R operator()(ArgTypes... args) const - -#include <functional> -#include <new> -#include <cstdlib> -#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::function<void ()> r1(f_void_0); - r1(); - assert(count == save_count+1); - save_count = count; - } - // function pointer - { - void (*fp)() = f_void_0; - std::function<void ()> r1(fp); - r1(); - assert(count == save_count+1); - save_count = count; - } - // functor - { - A_void_0 a0; - std::function<void ()> r1(a0); - r1(); - assert(count == save_count+1); - save_count = count; - } -} - -int main() -{ - test_void_0(); -} _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits