passed 1 tests in /test
passed 1 tests in /test/algorithms
passed 1 tests in /test/algorithms/alg.c.library
passed 1 tests in /test/algorithms/alg.modifying.operations
passed 4 tests in /test/algorithms/alg.modifying.operations/alg.copy
passed 2 tests in /test/algorithms/alg.modifying.operations/alg.fill
passed 2 tests in /test/algorithms/alg.modifying.operations/alg.generate
passed 2 tests in /test/algorithms/alg.modifying.operations/alg.move
passed 5 tests in /test/algorithms/alg.modifying.operations/alg.partitions
random_shuffle_urng.pass.cpp:32:2: error: #error random_shuffle for UniformRandomNumberGenerator not implemented
#error random_shuffle for UniformRandomNumberGenerator not implemented
 ^
1 error generated.
random_shuffle_urng.pass.cpp failed to compile
failed 1 tests in /test/algorithms/alg.modifying.operations/alg.random.shuffle
passed 2 tests in /test/algorithms/alg.modifying.operations/alg.random.shuffle
passed 4 tests in /test/algorithms/alg.modifying.operations/alg.remove
passed 4 tests in /test/algorithms/alg.modifying.operations/alg.replace
passed 2 tests in /test/algorithms/alg.modifying.operations/alg.reverse
passed 2 tests in /test/algorithms/alg.modifying.operations/alg.rotate
passed 2 tests in /test/algorithms/alg.modifying.operations/alg.swap
passed 2 tests in /test/algorithms/alg.modifying.operations/alg.transform
passed 4 tests in /test/algorithms/alg.modifying.operations/alg.unique
passed 1 tests in /test/algorithms/alg.nonmodifying
passed 2 tests in /test/algorithms/alg.nonmodifying/alg.adjacent.find
passed 1 tests in /test/algorithms/alg.nonmodifying/alg.all_of
passed 1 tests in /test/algorithms/alg.nonmodifying/alg.any_of
passed 2 tests in /test/algorithms/alg.nonmodifying/alg.count
passed 2 tests in /test/algorithms/alg.nonmodifying/alg.equal
passed 3 tests in /test/algorithms/alg.nonmodifying/alg.find
passed 2 tests in /test/algorithms/alg.nonmodifying/alg.find.end
passed 2 tests in /test/algorithms/alg.nonmodifying/alg.find.first.of
passed 1 tests in /test/algorithms/alg.nonmodifying/alg.foreach
passed 2 tests in /test/algorithms/alg.nonmodifying/alg.is_permutation
passed 1 tests in /test/algorithms/alg.nonmodifying/alg.none_of
passed 2 tests in /test/algorithms/alg.nonmodifying/alg.search
passed 2 tests in /test/algorithms/alg.nonmodifying/mismatch
passed 1 tests in /test/algorithms/alg.sorting
passed 1 tests in /test/algorithms/alg.sorting/alg.binary.search
passed 2 tests in /test/algorithms/alg.sorting/alg.binary.search/binary.search
passed 2 tests in /test/algorithms/alg.sorting/alg.binary.search/equal.range
passed 2 tests in /test/algorithms/alg.sorting/alg.binary.search/lower.bound
passed 2 tests in /test/algorithms/alg.sorting/alg.binary.search/upper.bound
passed 1 tests in /test/algorithms/alg.sorting/alg.heap.operations
passed 4 tests in /test/algorithms/alg.sorting/alg.heap.operations/is.heap
passed 2 tests in /test/algorithms/alg.sorting/alg.heap.operations/make.heap
passed 2 tests in /test/algorithms/alg.sorting/alg.heap.operations/pop.heap
passed 2 tests in /test/algorithms/alg.sorting/alg.heap.operations/push.heap
passed 2 tests in /test/algorithms/alg.sorting/alg.heap.operations/sort.heap
passed 2 tests in /test/algorithms/alg.sorting/alg.lex.comparison
passed 4 tests in /test/algorithms/alg.sorting/alg.merge
max_init_list.pass.cpp:33:2: error: #error max(initializer_list<T> t) is not implemented
#error max(initializer_list<T> t) is not implemented
 ^
1 error generated.
max_init_list.pass.cpp failed to compile
max_init_list_comp.pass.cpp:33:2: error: #error max(initializer_list<T> t, Compare comp) is not implemented
#error max(initializer_list<T> t, Compare comp) is not implemented
 ^
1 error generated.
max_init_list_comp.pass.cpp failed to compile
min_init_list.pass.cpp:33:2: error: #error min(initializer_list<T> t) is not implemented
#error min(initializer_list<T> t) is not implemented
 ^
1 error generated.
min_init_list.pass.cpp failed to compile
min_init_list_comp.pass.cpp:33:2: error: #error min(initializer_list<T> t, Compare comp) is not implemented
#error min(initializer_list<T> t, Compare comp) is not implemented
 ^
1 error generated.
min_init_list_comp.pass.cpp failed to compile
minmax.pass.cpp:37:44: error: no member named 'minmax' in namespace 'std'
    std::pair<const T&, const T&> p = std::minmax(a, b);
                                      ~~~~~^
In file included from minmax.pass.cpp:30:
In file included from ../../../../include/algorithm:567:
../../../../include/utility:227:40: error: reference to type 'int const' requires an initializer
    _LIBCPP_INLINE_VISIBILITY pair() : first(), second() {}
                                       ^
minmax.pass.cpp:37:35: note: in instantiation of member function 'std::pair<int const &, int const &>::pair' requested here
    std::pair<const T&, const T&> p = std::minmax(a, b);
                                  ^
minmax.pass.cpp:47:5: note: in instantiation of function template specialization 'test<int>' requested here
    test(x, y, x, y);
    ^
In file included from minmax.pass.cpp:30:
In file included from ../../../../include/algorithm:567:
../../../../include/utility:227:49: error: reference to type 'int const' requires an initializer
    _LIBCPP_INLINE_VISIBILITY pair() : first(), second() {}
                                                ^
3 errors generated.
minmax.pass.cpp failed to compile
minmax_comp.pass.cpp:39:44: error: no member named 'minmax' in namespace 'std'
    std::pair<const T&, const T&> p = std::minmax(a, b, c);
                                      ~~~~~^
In file included from minmax_comp.pass.cpp:31:
In file included from ../../../../include/algorithm:567:
../../../../include/utility:227:40: error: reference to type 'int const' requires an initializer
    _LIBCPP_INLINE_VISIBILITY pair() : first(), second() {}
                                       ^
minmax_comp.pass.cpp:39:35: note: in instantiation of member function 'std::pair<int const &, int const &>::pair' requested here
    std::pair<const T&, const T&> p = std::minmax(a, b, c);
                                  ^
minmax_comp.pass.cpp:49:5: note: in instantiation of function template specialization 'test<int, std::greater<int> >' requested here
    test(x, y, std::greater<int>(), x, y);
    ^
In file included from minmax_comp.pass.cpp:31:
In file included from ../../../../include/algorithm:567:
../../../../include/utility:227:49: error: reference to type 'int const' requires an initializer
    _LIBCPP_INLINE_VISIBILITY pair() : first(), second() {}
                                                ^
3 errors generated.
minmax_comp.pass.cpp failed to compile
minmax_init_list.pass.cpp:33:2: error: #error minmax(initializer_list<T> t) is not implemented
#error minmax(initializer_list<T> t) is not implemented
 ^
1 error generated.
minmax_init_list.pass.cpp failed to compile
minmax_init_list_comp.pass.cpp:33:2: error: #error minmax(initializer_list<T> t, Compare comp) is not implemented
#error minmax(initializer_list<T> t, Compare comp) is not implemented
 ^
1 error generated.
minmax_init_list_comp.pass.cpp failed to compile
failed 8 tests in /test/algorithms/alg.sorting/alg.min.max
passed 10 tests in /test/algorithms/alg.sorting/alg.min.max
passed 2 tests in /test/algorithms/alg.sorting/alg.nth.element
passed 4 tests in /test/algorithms/alg.sorting/alg.permutation.generators
passed 1 tests in /test/algorithms/alg.sorting/alg.set.operations
passed 2 tests in /test/algorithms/alg.sorting/alg.set.operations/includes
passed 2 tests in /test/algorithms/alg.sorting/alg.set.operations/set.difference
passed 2 tests in /test/algorithms/alg.sorting/alg.set.operations/set.intersection
passed 2 tests in /test/algorithms/alg.sorting/alg.set.operations/set.symmetric.difference
passed 2 tests in /test/algorithms/alg.sorting/alg.set.operations/set.union
passed 1 tests in /test/algorithms/alg.sorting/alg.sort
passed 4 tests in /test/algorithms/alg.sorting/alg.sort/is.sorted
passed 2 tests in /test/algorithms/alg.sorting/alg.sort/partial.sort
passed 2 tests in /test/algorithms/alg.sorting/alg.sort/partial.sort.copy
passed 2 tests in /test/algorithms/alg.sorting/alg.sort/sort
passed 2 tests in /test/algorithms/alg.sorting/alg.sort/stable.sort
passed 1 tests in /test/algorithms/algorithms.general
not implemented:  /test/atomics
not implemented:  /test/atomics/atomics.fences
not implemented:  /test/atomics/atomics.flag
not implemented:  /test/atomics/atomics.general
not implemented:  /test/atomics/atomics.lockfree
not implemented:  /test/atomics/atomics.order
not implemented:  /test/atomics/atomics.syn
not implemented:  /test/atomics/atomics.types
not implemented:  /test/atomics/atomics.types/atomics.types.address
not implemented:  /test/atomics/atomics.types/atomics.types.generic
not implemented:  /test/atomics/atomics.types/atomics.types.integral
not implemented:  /test/atomics/atomics.types.operations
passed 1 tests in /test/containers
passed 4 tests in /test/containers/associative
passed 2 tests in /test/containers/associative/map
passed 7 tests in /test/containers/associative/map/map.access
passed 17 tests in /test/containers/associative/map/map.cons
passed 12 tests in /test/containers/associative/map/map.modifiers
passed 5 tests in /test/containers/associative/map/map.ops
passed 2 tests in /test/containers/associative/map/map.special
passed 5 tests in /test/containers/associative/multimap
passed 17 tests in /test/containers/associative/multimap/multimap.cons
passed 12 tests in /test/containers/associative/multimap/multimap.modifiers
passed 5 tests in /test/containers/associative/multimap/multimap.ops
passed 2 tests in /test/containers/associative/multimap/multimap.special
passed 22 tests in /test/containers/associative/multiset
passed 17 tests in /test/containers/associative/multiset/multiset.cons
passed 2 tests in /test/containers/associative/multiset/multiset.special
passed 23 tests in /test/containers/associative/set
passed 17 tests in /test/containers/associative/set/set.cons
passed 2 tests in /test/containers/associative/set/set.special
passed 1 tests in /test/containers/container.requirements
passed 1 tests in /test/containers/container.requirements/associative.reqmts
passed 1 tests in /test/containers/container.requirements/associative.reqmts/associative.reqmts.except
passed 1 tests in /test/containers/container.requirements/container.requirements.dataraces
passed 1 tests in /test/containers/container.requirements/container.requirements.general
passed 1 tests in /test/containers/container.requirements/sequence.reqmts
passed 1 tests in /test/containers/container.requirements/unord.req
passed 1 tests in /test/containers/container.requirements/unord.req/unord.req.except
passed 1 tests in /test/containers/containers.general
passed 1 tests in /test/containers/sequences
passed 3 tests in /test/containers/sequences/array
passed 2 tests in /test/containers/sequences/array/array.cons
passed 2 tests in /test/containers/sequences/array/array.data
passed 1 tests in /test/containers/sequences/array/array.fill
passed 1 tests in /test/containers/sequences/array/array.size
passed 1 tests in /test/containers/sequences/array/array.special
passed 1 tests in /test/containers/sequences/array/array.swap
passed 4 tests in /test/containers/sequences/array/array.tuple
passed 1 tests in /test/containers/sequences/array/array.zero
passed 1 tests in /test/containers/sequences/container.adaptors
passed 1 tests in /test/containers/sequences/container.adaptors/priority.queue
passed 12 tests in /test/containers/sequences/container.adaptors/priority.queue/priqueue.cons
passed 6 tests in /test/containers/sequences/container.adaptors/priority.queue/priqueue.cons.alloc
passed 8 tests in /test/containers/sequences/container.adaptors/priority.queue/priqueue.members
passed 1 tests in /test/containers/sequences/container.adaptors/priority.queue/priqueue.special
passed 1 tests in /test/containers/sequences/container.adaptors/queue
passed 5 tests in /test/containers/sequences/container.adaptors/queue/queue.cons
passed 5 tests in /test/containers/sequences/container.adaptors/queue/queue.cons.alloc
passed 14 tests in /test/containers/sequences/container.adaptors/queue/queue.defn
passed 2 tests in /test/containers/sequences/container.adaptors/queue/queue.ops
passed 1 tests in /test/containers/sequences/container.adaptors/queue/queue.special
passed 1 tests in /test/containers/sequences/container.adaptors/stack
passed 5 tests in /test/containers/sequences/container.adaptors/stack/stack.cons
passed 5 tests in /test/containers/sequences/container.adaptors/stack/stack.cons.alloc
passed 12 tests in /test/containers/sequences/container.adaptors/stack/stack.defn
passed 2 tests in /test/containers/sequences/container.adaptors/stack/stack.ops
passed 1 tests in /test/containers/sequences/container.adaptors/stack/stack.special
passed 2 tests in /test/containers/sequences/deque
passed 4 tests in /test/containers/sequences/deque/deque.capacity
passed 19 tests in /test/containers/sequences/deque/deque.cons
passed 16 tests in /test/containers/sequences/deque/deque.modifiers
In file included from copy.pass.cpp:32:
../../../../../include/deque:568:17: error: cannot initialize a variable of type 'pointer' (aka 'int *') with an lvalue of type 'pointer' (aka 'int const *')
        pointer __fb = __f.__ptr_;
                ^      ~~~~~~~~~~
copy.pass.cpp:72:5: note: in instantiation of function template specialization 'std::copy<int, int const *, int const &, int *const *, int, 1024, random_access_iterator<std::__deque_iterator<int, int *, int &, int **, int, 1024> > >' requested here
    assert(std::copy(c1.cbegin(), c1.cend(), RAI(c2.begin())) == RAI(c2.end()));
    ^
copy.pass.cpp:72:12: note: instantiated from:
    assert(std::copy(c1.cbegin(), c1.cend(), RAI(c2.begin())) == RAI(c2.end()));
           ^
Assertion failed: (TemplateArgs(T->getDepth(), T->getIndex()).getKind() == TemplateArgument::Type && "Template argument kind mismatch"), function TransformTemplateTypeParmType, file /Users/buildslave/zorg/buildbot/smooshlab/slave/build.clang-x86_64-darwin10-miniswb/clang.src/clang/clang/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp, line 874.
0  clang             0x0000000100b3f7a2
1  clang             0x0000000100b3fc19
2  libSystem.B.dylib 0x00007fff85ee880a _sigtramp + 26
3  libSystem.B.dylib 0x00007fff85e8d50a tiny_malloc_from_free_list + 1196
4  libSystem.B.dylib 0x00007fff85f63ef0 __pthread_markcancel + 0
5  clang             0x00000001002ffd69
6  clang             0x00000001002fd271
7  clang             0x000000010030fa72
8  clang             0x00000001002ff313
9  clang             0x00000001002fd271
10 clang             0x00000001002fd410
11 clang             0x000000010030f399
12 clang             0x00000001002ff68f
13 clang             0x00000001002fd271
14 clang             0x00000001002fd14b
15 clang             0x0000000100312c5f
16 clang             0x0000000100312963
17 clang             0x00000001003020f8
18 clang             0x00000001003110ae
19 clang             0x00000001003017a3
20 clang             0x00000001003016cc
21 clang             0x00000001003158e6
22 clang             0x000000010031623a
23 clang             0x00000001001d200a
24 clang             0x00000001004b03b8
25 clang             0x00000001001d1000
26 clang             0x0000000100028ad3
27 clang             0x00000001000144cd
28 clang             0x000000010001574f
29 clang             0x0000000100012fac
Stack dump:
0.	Program arguments: /Users/hinnant/Downloads/current-clang/Developer/usr/bin/clang -cc1 -triple i386-apple-darwin10.0.0 -S -disable-free -main-file-name copy.pass.cpp -pic-level 1 -mdisable-fp-elim -target-cpu yonah -nostdinc++ -resource-dir /Users/hinnant/Downloads/current-clang/Developer/usr/lib/clang/1.5 -I../../../../../include -ferror-limit 19 -ftemplate-backtrace-limit 10 -fmessage-length 0 -stack-protector 1 -fblocks -fexceptions -fdiagnostics-show-option -o /var/folders/ax/axmvgG0xF8COmLBHN1a-Ok+++TQ/-Tmp-/cc-aAOpmX.s -x c++ copy.pass.cpp 
1.	<eof> parser at end of file
2.	../../../../../include/deque:428:5: instantiating function definition 'std::copy'
clang: error: compiler command failed due to signal 6 (use -v to see invocation)
copy.pass.cpp failed to compile
In file included from copy_backward.pass.cpp:32:
../../../../../include/deque:656:17: error: cannot initialize a variable of type 'pointer' (aka 'int *') with an rvalue of type 'pointer' (aka 'int const *')
        pointer __le = __l.__ptr_ + 1;
                ^      ~~~~~~~~~~~~~~
copy_backward.pass.cpp:71:5: note: in instantiation of function template specialization 'std::copy_backward<int, int const *, int const &, int *const *, int, 1024, random_access_iterator<std::__deque_iterator<int, int *, int &, int **, int, 1024> > >' requested here
    assert(std::copy_backward(c1.cbegin(), c1.cend(), RAI(c2.end())) == RAI(c2.begin()));
    ^
copy_backward.pass.cpp:71:12: note: instantiated from:
    assert(std::copy_backward(c1.cbegin(), c1.cend(), RAI(c2.end())) == RAI(c2.begin()));
           ^
Assertion failed: (TemplateArgs(T->getDepth(), T->getIndex()).getKind() == TemplateArgument::Type && "Template argument kind mismatch"), function TransformTemplateTypeParmType, file /Users/buildslave/zorg/buildbot/smooshlab/slave/build.clang-x86_64-darwin10-miniswb/clang.src/clang/clang/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp, line 874.
0  clang             0x0000000100b3f7a2
1  clang             0x0000000100b3fc19
2  libSystem.B.dylib 0x00007fff85ee880a _sigtramp + 26
3  libSystem.B.dylib 0x00007fff85e8d50a tiny_malloc_from_free_list + 1196
4  libSystem.B.dylib 0x00007fff85f63ef0 __pthread_markcancel + 0
5  clang             0x00000001002ffd69
6  clang             0x00000001002fd271
7  clang             0x000000010030fa72
8  clang             0x00000001002ff313
9  clang             0x00000001002fd271
10 clang             0x00000001002fd410
11 clang             0x000000010030f399
12 clang             0x00000001002ff68f
13 clang             0x00000001002fd271
14 clang             0x00000001002fd14b
15 clang             0x0000000100312c5f
16 clang             0x0000000100312963
17 clang             0x00000001003020f8
18 clang             0x00000001003110ae
19 clang             0x00000001003017a3
20 clang             0x00000001003016cc
21 clang             0x00000001003158e6
22 clang             0x000000010031623a
23 clang             0x00000001001d200a
24 clang             0x00000001004b03b8
25 clang             0x00000001001d1000
26 clang             0x0000000100028ad3
27 clang             0x00000001000144cd
28 clang             0x000000010001574f
29 clang             0x0000000100012fac
Stack dump:
0.	Program arguments: /Users/hinnant/Downloads/current-clang/Developer/usr/bin/clang -cc1 -triple i386-apple-darwin10.0.0 -S -disable-free -main-file-name copy_backward.pass.cpp -pic-level 1 -mdisable-fp-elim -target-cpu yonah -nostdinc++ -resource-dir /Users/hinnant/Downloads/current-clang/Developer/usr/lib/clang/1.5 -I../../../../../include -ferror-limit 19 -ftemplate-backtrace-limit 10 -fmessage-length 0 -stack-protector 1 -fblocks -fexceptions -fdiagnostics-show-option -o /var/folders/ax/axmvgG0xF8COmLBHN1a-Ok+++TQ/-Tmp-/cc-v3NnDs.s -x c++ copy_backward.pass.cpp 
1.	<eof> parser at end of file
2.	../../../../../include/deque:453:5: instantiating function definition 'std::copy_backward'
clang: error: compiler command failed due to signal 6 (use -v to see invocation)
copy_backward.pass.cpp failed to compile
In file included from move.pass.cpp:32:
../../../../../include/deque:741:17: error: cannot initialize a variable of type 'pointer' (aka 'int *') with an lvalue of type 'pointer' (aka 'int const *')
        pointer __fb = __f.__ptr_;
                ^      ~~~~~~~~~~
move.pass.cpp:71:5: note: in instantiation of function template specialization 'std::move<int, int const *, int const &, int *const *, int, 1024, random_access_iterator<std::__deque_iterator<int, int *, int &, int **, int, 1024> > >' requested here
    assert(std::move(c1.cbegin(), c1.cend(), RAI(c2.begin())) == RAI(c2.end()));
    ^
move.pass.cpp:71:12: note: instantiated from:
    assert(std::move(c1.cbegin(), c1.cend(), RAI(c2.begin())) == RAI(c2.end()));
           ^
Assertion failed: (TemplateArgs(T->getDepth(), T->getIndex()).getKind() == TemplateArgument::Type && "Template argument kind mismatch"), function TransformTemplateTypeParmType, file /Users/buildslave/zorg/buildbot/smooshlab/slave/build.clang-x86_64-darwin10-miniswb/clang.src/clang/clang/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp, line 874.
0  clang             0x0000000100b3f7a2
1  clang             0x0000000100b3fc19
2  libSystem.B.dylib 0x00007fff85ee880a _sigtramp + 26
3  libSystem.B.dylib 0x00007fff85e8d50a tiny_malloc_from_free_list + 1196
4  libSystem.B.dylib 0x00007fff85f63ef0 __pthread_markcancel + 0
5  clang             0x00000001002ffd69
6  clang             0x00000001002fd271
7  clang             0x000000010030fa72
8  clang             0x00000001002ff313
9  clang             0x00000001002fd271
10 clang             0x00000001002fd410
11 clang             0x000000010030f399
12 clang             0x00000001002ff68f
13 clang             0x00000001002fd271
14 clang             0x00000001002fd14b
15 clang             0x0000000100312c5f
16 clang             0x0000000100312963
17 clang             0x00000001003020f8
18 clang             0x00000001003110ae
19 clang             0x00000001003017a3
20 clang             0x00000001003016cc
21 clang             0x00000001003158e6
22 clang             0x000000010031623a
23 clang             0x00000001001d200a
24 clang             0x00000001004b03b8
25 clang             0x00000001001d1000
26 clang             0x0000000100028ad3
27 clang             0x00000001000144cd
28 clang             0x000000010001574f
29 clang             0x0000000100012fac
Stack dump:
0.	Program arguments: /Users/hinnant/Downloads/current-clang/Developer/usr/bin/clang -cc1 -triple i386-apple-darwin10.0.0 -S -disable-free -main-file-name move.pass.cpp -pic-level 1 -mdisable-fp-elim -target-cpu yonah -nostdinc++ -resource-dir /Users/hinnant/Downloads/current-clang/Developer/usr/lib/clang/1.5 -I../../../../../include -ferror-limit 19 -ftemplate-backtrace-limit 10 -fmessage-length 0 -stack-protector 1 -fblocks -fexceptions -fdiagnostics-show-option -o /var/folders/ax/axmvgG0xF8COmLBHN1a-Ok+++TQ/-Tmp-/cc-JALMH6.s -x c++ move.pass.cpp 
1.	<eof> parser at end of file
2.	../../../../../include/deque:478:5: instantiating function definition 'std::move'
clang: error: compiler command failed due to signal 6 (use -v to see invocation)
move.pass.cpp failed to compile
In file included from move_backward.pass.cpp:32:
../../../../../include/deque:829:17: error: cannot initialize a variable of type 'pointer' (aka 'int *') with an rvalue of type 'pointer' (aka 'int const *')
        pointer __le = __l.__ptr_ + 1;
                ^      ~~~~~~~~~~~~~~
move_backward.pass.cpp:71:5: note: in instantiation of function template specialization 'std::move_backward<int, int const *, int const &, int *const *, int, 1024, random_access_iterator<std::__deque_iterator<int, int *, int &, int **, int, 1024> > >' requested here
    assert(std::move_backward(c1.cbegin(), c1.cend(), RAI(c2.end())) == RAI(c2.begin()));
    ^
move_backward.pass.cpp:71:12: note: instantiated from:
    assert(std::move_backward(c1.cbegin(), c1.cend(), RAI(c2.end())) == RAI(c2.begin()));
           ^
Assertion failed: (TemplateArgs(T->getDepth(), T->getIndex()).getKind() == TemplateArgument::Type && "Template argument kind mismatch"), function TransformTemplateTypeParmType, file /Users/buildslave/zorg/buildbot/smooshlab/slave/build.clang-x86_64-darwin10-miniswb/clang.src/clang/clang/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp, line 874.
0  clang             0x0000000100b3f7a2
1  clang             0x0000000100b3fc19
2  libSystem.B.dylib 0x00007fff85ee880a _sigtramp + 26
3  libSystem.B.dylib 0x00007fff85e8d50a tiny_malloc_from_free_list + 1196
4  libSystem.B.dylib 0x00007fff85f63ef0 __pthread_markcancel + 0
5  clang             0x00000001002ffd69
6  clang             0x00000001002fd271
7  clang             0x000000010030fa72
8  clang             0x00000001002ff313
9  clang             0x00000001002fd271
10 clang             0x00000001002fd410
11 clang             0x000000010030f399
12 clang             0x00000001002ff68f
13 clang             0x00000001002fd271
14 clang             0x00000001002fd14b
15 clang             0x0000000100312c5f
16 clang             0x0000000100312963
17 clang             0x00000001003020f8
18 clang             0x00000001003110ae
19 clang             0x00000001003017a3
20 clang             0x00000001003016cc
21 clang             0x00000001003158e6
22 clang             0x000000010031623a
23 clang             0x00000001001d200a
24 clang             0x00000001004b03b8
25 clang             0x00000001001d1000
26 clang             0x0000000100028ad3
27 clang             0x00000001000144cd
28 clang             0x000000010001574f
29 clang             0x0000000100012fac
Stack dump:
0.	Program arguments: /Users/hinnant/Downloads/current-clang/Developer/usr/bin/clang -cc1 -triple i386-apple-darwin10.0.0 -S -disable-free -main-file-name move_backward.pass.cpp -pic-level 1 -mdisable-fp-elim -target-cpu yonah -nostdinc++ -resource-dir /Users/hinnant/Downloads/current-clang/Developer/usr/lib/clang/1.5 -I../../../../../include -ferror-limit 19 -ftemplate-backtrace-limit 10 -fmessage-length 0 -stack-protector 1 -fblocks -fexceptions -fdiagnostics-show-option -o /var/folders/ax/axmvgG0xF8COmLBHN1a-Ok+++TQ/-Tmp-/cc-mCxRtC.s -x c++ move_backward.pass.cpp 
1.	<eof> parser at end of file
2.	../../../../../include/deque:503:5: instantiating function definition 'std::move_backward'
clang: error: compiler command failed due to signal 6 (use -v to see invocation)
move_backward.pass.cpp failed to compile
failed 4 tests in /test/containers/sequences/deque/deque.special
passed 1 tests in /test/containers/sequences/deque/deque.special
passed 3 tests in /test/containers/sequences/forwardlist
passed 1 tests in /test/containers/sequences/forwardlist/forwardlist.access
passed 21 tests in /test/containers/sequences/forwardlist/forwardlist.cons
passed 2 tests in /test/containers/sequences/forwardlist/forwardlist.iter
passed 15 tests in /test/containers/sequences/forwardlist/forwardlist.modifiers
passed 12 tests in /test/containers/sequences/forwardlist/forwardlist.ops
passed 4 tests in /test/containers/sequences/forwardlist/forwardlist.spec
passed 2 tests in /test/containers/sequences/list
passed 2 tests in /test/containers/sequences/list/list.capacity
passed 15 tests in /test/containers/sequences/list/list.cons
passed 17 tests in /test/containers/sequences/list/list.modifiers
passed 12 tests in /test/containers/sequences/list/list.ops
passed 1 tests in /test/containers/sequences/list/list.special
passed 2 tests in /test/containers/sequences/vector
passed 6 tests in /test/containers/sequences/vector/vector.capacity
passed 16 tests in /test/containers/sequences/vector/vector.cons
passed 2 tests in /test/containers/sequences/vector/vector.data
passed 11 tests in /test/containers/sequences/vector/vector.modifiers
passed 1 tests in /test/containers/sequences/vector/vector.special
passed 31 tests in /test/containers/sequences/vector.bool
passed 1 tests in /test/containers/unord
passed 20 tests in /test/containers/unord/unord.map
passed 24 tests in /test/containers/unord/unord.map/unord.map.cnstr
passed 2 tests in /test/containers/unord/unord.map/unord.map.elem
passed 1 tests in /test/containers/unord/unord.map/unord.map.swap
passed 12 tests in /test/containers/unord/unord.map/unorder.map.modifiers
passed 21 tests in /test/containers/unord/unord.multimap
passed 24 tests in /test/containers/unord/unord.multimap/unord.multimap.cnstr
passed 12 tests in /test/containers/unord/unord.multimap/unord.multimap.modifiers
passed 1 tests in /test/containers/unord/unord.multimap/unord.multimap.swap
passed 33 tests in /test/containers/unord/unord.multiset
passed 24 tests in /test/containers/unord/unord.multiset/unord.multiset.cnstr
passed 1 tests in /test/containers/unord/unord.multiset/unord.multiset.swap
passed 34 tests in /test/containers/unord/unord.set
passed 24 tests in /test/containers/unord/unord.set/unord.set.cnstr
passed 1 tests in /test/containers/unord/unord.set/unord.set.swap
passed 1 tests in /test/depr
passed 1 tests in /test/depr/depr.auto.ptr
passed 1 tests in /test/depr/depr.auto.ptr/auto.ptr
passed 10 tests in /test/depr/depr.auto.ptr/auto.ptr/auto.ptr.cons
passed 4 tests in /test/depr/depr.auto.ptr/auto.ptr/auto.ptr.conv
passed 4 tests in /test/depr/depr.auto.ptr/auto.ptr/auto.ptr.members
inttypes_h.pass.cpp:274:2: error: #error PRId8 not defined
#error PRId8 not defined
 ^
inttypes_h.pass.cpp:278:2: error: #error PRId16 not defined
#error PRId16 not defined
 ^
inttypes_h.pass.cpp:282:2: error: #error PRId32 not defined
#error PRId32 not defined
 ^
inttypes_h.pass.cpp:286:2: error: #error PRId64 not defined
#error PRId64 not defined
 ^
inttypes_h.pass.cpp:290:2: error: #error PRIdLEAST8 not defined
#error PRIdLEAST8 not defined
 ^
inttypes_h.pass.cpp:294:2: error: #error PRIdLEAST16 not defined
#error PRIdLEAST16 not defined
 ^
inttypes_h.pass.cpp:298:2: error: #error PRIdLEAST32 not defined
#error PRIdLEAST32 not defined
 ^
inttypes_h.pass.cpp:302:2: error: #error PRIdLEAST64 not defined
#error PRIdLEAST64 not defined
 ^
inttypes_h.pass.cpp:306:2: error: #error PRIdFAST8 not defined
#error PRIdFAST8 not defined
 ^
inttypes_h.pass.cpp:310:2: error: #error PRIdFAST16 not defined
#error PRIdFAST16 not defined
 ^
inttypes_h.pass.cpp:314:2: error: #error PRIdFAST32 not defined
#error PRIdFAST32 not defined
 ^
inttypes_h.pass.cpp:318:2: error: #error PRIdFAST64 not defined
#error PRIdFAST64 not defined
 ^
inttypes_h.pass.cpp:322:2: error: #error PRIdMAX not defined
#error PRIdMAX not defined
 ^
inttypes_h.pass.cpp:326:2: error: #error PRIdPTR not defined
#error PRIdPTR not defined
 ^
inttypes_h.pass.cpp:330:2: error: #error PRIi8 not defined
#error PRIi8 not defined
 ^
inttypes_h.pass.cpp:334:2: error: #error PRIi16 not defined
#error PRIi16 not defined
 ^
inttypes_h.pass.cpp:338:2: error: #error PRIi32 not defined
#error PRIi32 not defined
 ^
inttypes_h.pass.cpp:342:2: error: #error PRIi64 not defined
#error PRIi64 not defined
 ^
inttypes_h.pass.cpp:346:2: error: #error PRIiLEAST8 not defined
#error PRIiLEAST8 not defined
 ^
fatal error: too many errors emitted, stopping now
20 errors generated.
inttypes_h.pass.cpp failed to compile
math_h.pass.cpp:545:5: warning: hexadecimal floating constants are a C99 feature that is incompatible with C++0x
    assert(nextafter(0,1) == 0x1p-1074);
    ^
math_h.pass.cpp:545:30: note: instantiated from:
    assert(nextafter(0,1) == 0x1p-1074);
                             ^
math_h.pass.cpp:553:5: warning: hexadecimal floating constants are a C99 feature that is incompatible with C++0x
    assert(nexttoward(0, 1) == 0x1p-1074);
    ^
math_h.pass.cpp:553:32: note: instantiated from:
    assert(nexttoward(0, 1) == 0x1p-1074);
                               ^
2 warnings generated.
stdio_h.pass.cpp:111:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(vfprintf(fp,"",va)), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:111:33: note: instantiated from:
    static_assert((std::is_same<decltype(vfprintf(fp,"",va)), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:111:54: note: instantiated from:
    static_assert((std::is_same<decltype(vfprintf(fp,"",va)), int>::value), "");
                                                     ^~
stdio_h.pass.cpp:112:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(fprintf(fp,"")), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:112:33: note: instantiated from:
    static_assert((std::is_same<decltype(fprintf(fp,"")), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:112:53: note: instantiated from:
    static_assert((std::is_same<decltype(fprintf(fp,"")), int>::value), "");
                                                    ^~
stdio_h.pass.cpp:114:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(printf("")), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:114:33: note: instantiated from:
    static_assert((std::is_same<decltype(printf("")), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:114:49: note: instantiated from:
    static_assert((std::is_same<decltype(printf("")), int>::value), "");
                                                ^~
stdio_h.pass.cpp:116:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(snprintf(cp,0,"")), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:116:33: note: instantiated from:
    static_assert((std::is_same<decltype(snprintf(cp,0,"")), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:116:56: note: instantiated from:
    static_assert((std::is_same<decltype(snprintf(cp,0,"")), int>::value), "");
                                                       ^~
stdio_h.pass.cpp:117:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(sprintf(cp,"")), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:117:33: note: instantiated from:
    static_assert((std::is_same<decltype(sprintf(cp,"")), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:117:53: note: instantiated from:
    static_assert((std::is_same<decltype(sprintf(cp,"")), int>::value), "");
                                                    ^~
stdio_h.pass.cpp:119:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(vfprintf(fp,"",va)), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:119:33: note: instantiated from:
    static_assert((std::is_same<decltype(vfprintf(fp,"",va)), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:119:54: note: instantiated from:
    static_assert((std::is_same<decltype(vfprintf(fp,"",va)), int>::value), "");
                                                     ^~
stdio_h.pass.cpp:121:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(vprintf("",va)), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:121:33: note: instantiated from:
    static_assert((std::is_same<decltype(vprintf("",va)), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:121:50: note: instantiated from:
    static_assert((std::is_same<decltype(vprintf("",va)), int>::value), "");
                                                 ^~
stdio_h.pass.cpp:123:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(vsnprintf(cp,0,"",va)), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:123:33: note: instantiated from:
    static_assert((std::is_same<decltype(vsnprintf(cp,0,"",va)), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:123:57: note: instantiated from:
    static_assert((std::is_same<decltype(vsnprintf(cp,0,"",va)), int>::value), "");
                                                        ^~
stdio_h.pass.cpp:124:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(vsprintf(cp,"",va)), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:124:33: note: instantiated from:
    static_assert((std::is_same<decltype(vsprintf(cp,"",va)), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
stdio_h.pass.cpp:124:54: note: instantiated from:
    static_assert((std::is_same<decltype(vsprintf(cp,"",va)), int>::value), "");
                                                     ^~
9 warnings generated.
uchar_h.pass.cpp:26:10: fatal error: 'uchar.h' file not found
#include <uchar.h>
         ^
1 error generated.
uchar_h.pass.cpp failed to compile
failed 2 tests in /test/depr/depr.c.headers
passed 24 tests in /test/depr/depr.c.headers
passed 5 tests in /test/depr/depr.ios.members
passed 1 tests in /test/depr/depr.lib.binders
passed 1 tests in /test/depr/depr.lib.binders/depr.lib.bind.1st
passed 1 tests in /test/depr/depr.lib.binders/depr.lib.bind.2nd
passed 1 tests in /test/depr/depr.lib.binders/depr.lib.binder.1st
passed 1 tests in /test/depr/depr.lib.binders/depr.lib.binder.2nd
passed 1 tests in /test/depr/depr.str.strstreams
passed 1 tests in /test/depr/depr.str.strstreams/depr.istrstream
passed 4 tests in /test/depr/depr.str.strstreams/depr.istrstream/depr.istrstream.cons
passed 2 tests in /test/depr/depr.str.strstreams/depr.istrstream/depr.istrstream.members
passed 1 tests in /test/depr/depr.str.strstreams/depr.ostrstream
passed 2 tests in /test/depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.cons
passed 4 tests in /test/depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.members
passed 1 tests in /test/depr/depr.str.strstreams/depr.strstream
passed 2 tests in /test/depr/depr.str.strstreams/depr.strstream/depr.strstream.cons
passed 1 tests in /test/depr/depr.str.strstreams/depr.strstream/depr.strstream.dest
passed 3 tests in /test/depr/depr.str.strstreams/depr.strstream/depr.strstream.oper
passed 1 tests in /test/depr/depr.str.strstreams/depr.strstreambuf
passed 8 tests in /test/depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons
passed 3 tests in /test/depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.members
passed 6 tests in /test/depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.virtuals
passed 1 tests in /test/diagnostics
passed 1 tests in /test/diagnostics/assertions
passed 1 tests in /test/diagnostics/diagnostics.general
passed 1 tests in /test/diagnostics/errno
passed 1 tests in /test/diagnostics/std.exceptions
passed 1 tests in /test/diagnostics/std.exceptions/domain.error
passed 1 tests in /test/diagnostics/std.exceptions/invalid.argument
passed 1 tests in /test/diagnostics/std.exceptions/length.error
passed 1 tests in /test/diagnostics/std.exceptions/logic.error
passed 1 tests in /test/diagnostics/std.exceptions/out.of.range
passed 1 tests in /test/diagnostics/std.exceptions/overflow.error
passed 1 tests in /test/diagnostics/std.exceptions/range.error
passed 1 tests in /test/diagnostics/std.exceptions/runtime.error
passed 1 tests in /test/diagnostics/std.exceptions/underflow.error
passed 2 tests in /test/diagnostics/syserr
passed 1 tests in /test/diagnostics/syserr/syserr.compare
passed 1 tests in /test/diagnostics/syserr/syserr.errcat
passed 1 tests in /test/diagnostics/syserr/syserr.errcat/syserr.errcat.derived
passed 3 tests in /test/diagnostics/syserr/syserr.errcat/syserr.errcat.nonvirtuals
passed 2 tests in /test/diagnostics/syserr/syserr.errcat/syserr.errcat.objects
passed 1 tests in /test/diagnostics/syserr/syserr.errcat/syserr.errcat.overview
passed 3 tests in /test/diagnostics/syserr/syserr.errcat/syserr.errcat.virtuals
passed 1 tests in /test/diagnostics/syserr/syserr.errcode
passed 3 tests in /test/diagnostics/syserr/syserr.errcode/syserr.errcode.constructors
passed 3 tests in /test/diagnostics/syserr/syserr.errcode/syserr.errcode.modifiers
passed 3 tests in /test/diagnostics/syserr/syserr.errcode/syserr.errcode.nonmembers
passed 5 tests in /test/diagnostics/syserr/syserr.errcode/syserr.errcode.observers
passed 1 tests in /test/diagnostics/syserr/syserr.errcode/syserr.errcode.overview
passed 1 tests in /test/diagnostics/syserr/syserr.errcondition
passed 3 tests in /test/diagnostics/syserr/syserr.errcondition/syserr.errcondition.constructors
passed 3 tests in /test/diagnostics/syserr/syserr.errcondition/syserr.errcondition.modifiers
passed 2 tests in /test/diagnostics/syserr/syserr.errcondition/syserr.errcondition.nonmembers
passed 4 tests in /test/diagnostics/syserr/syserr.errcondition/syserr.errcondition.observers
passed 1 tests in /test/diagnostics/syserr/syserr.errcondition/syserr.errcondition.overview
passed 1 tests in /test/diagnostics/syserr/syserr.hash
passed 1 tests in /test/diagnostics/syserr/syserr.syserr
passed 6 tests in /test/diagnostics/syserr/syserr.syserr/syserr.syserr.members
passed 1 tests in /test/diagnostics/syserr/syserr.syserr/syserr.syserr.overview
passed 1 tests in /test/input.output
passed 1 tests in /test/input.output/file.streams
cinttypes.pass.cpp:274:2: error: #error PRId8 not defined
#error PRId8 not defined
 ^
cinttypes.pass.cpp:278:2: error: #error PRId16 not defined
#error PRId16 not defined
 ^
cinttypes.pass.cpp:282:2: error: #error PRId32 not defined
#error PRId32 not defined
 ^
cinttypes.pass.cpp:286:2: error: #error PRId64 not defined
#error PRId64 not defined
 ^
cinttypes.pass.cpp:290:2: error: #error PRIdLEAST8 not defined
#error PRIdLEAST8 not defined
 ^
cinttypes.pass.cpp:294:2: error: #error PRIdLEAST16 not defined
#error PRIdLEAST16 not defined
 ^
cinttypes.pass.cpp:298:2: error: #error PRIdLEAST32 not defined
#error PRIdLEAST32 not defined
 ^
cinttypes.pass.cpp:302:2: error: #error PRIdLEAST64 not defined
#error PRIdLEAST64 not defined
 ^
cinttypes.pass.cpp:306:2: error: #error PRIdFAST8 not defined
#error PRIdFAST8 not defined
 ^
cinttypes.pass.cpp:310:2: error: #error PRIdFAST16 not defined
#error PRIdFAST16 not defined
 ^
cinttypes.pass.cpp:314:2: error: #error PRIdFAST32 not defined
#error PRIdFAST32 not defined
 ^
cinttypes.pass.cpp:318:2: error: #error PRIdFAST64 not defined
#error PRIdFAST64 not defined
 ^
cinttypes.pass.cpp:322:2: error: #error PRIdMAX not defined
#error PRIdMAX not defined
 ^
cinttypes.pass.cpp:326:2: error: #error PRIdPTR not defined
#error PRIdPTR not defined
 ^
cinttypes.pass.cpp:330:2: error: #error PRIi8 not defined
#error PRIi8 not defined
 ^
cinttypes.pass.cpp:334:2: error: #error PRIi16 not defined
#error PRIi16 not defined
 ^
cinttypes.pass.cpp:338:2: error: #error PRIi32 not defined
#error PRIi32 not defined
 ^
cinttypes.pass.cpp:342:2: error: #error PRIi64 not defined
#error PRIi64 not defined
 ^
cinttypes.pass.cpp:346:2: error: #error PRIiLEAST8 not defined
#error PRIiLEAST8 not defined
 ^
fatal error: too many errors emitted, stopping now
20 errors generated.
cinttypes.pass.cpp failed to compile
cstdio.pass.cpp:111:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(std::vfprintf(fp,"",va)), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:111:33: note: instantiated from:
    static_assert((std::is_same<decltype(std::vfprintf(fp,"",va)), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:111:59: note: instantiated from:
    static_assert((std::is_same<decltype(std::vfprintf(fp,"",va)), int>::value), "");
                                                          ^~
cstdio.pass.cpp:112:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(std::fprintf(fp,"")), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:112:33: note: instantiated from:
    static_assert((std::is_same<decltype(std::fprintf(fp,"")), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:112:58: note: instantiated from:
    static_assert((std::is_same<decltype(std::fprintf(fp,"")), int>::value), "");
                                                         ^~
cstdio.pass.cpp:114:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(std::printf("")), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:114:33: note: instantiated from:
    static_assert((std::is_same<decltype(std::printf("")), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:114:54: note: instantiated from:
    static_assert((std::is_same<decltype(std::printf("")), int>::value), "");
                                                     ^~
cstdio.pass.cpp:116:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(std::snprintf(cp,0,"")), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:116:33: note: instantiated from:
    static_assert((std::is_same<decltype(std::snprintf(cp,0,"")), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:116:61: note: instantiated from:
    static_assert((std::is_same<decltype(std::snprintf(cp,0,"")), int>::value), "");
                                                            ^~
cstdio.pass.cpp:117:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(std::sprintf(cp,"")), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:117:33: note: instantiated from:
    static_assert((std::is_same<decltype(std::sprintf(cp,"")), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:117:58: note: instantiated from:
    static_assert((std::is_same<decltype(std::sprintf(cp,"")), int>::value), "");
                                                         ^~
cstdio.pass.cpp:119:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(std::vfprintf(fp,"",va)), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:119:33: note: instantiated from:
    static_assert((std::is_same<decltype(std::vfprintf(fp,"",va)), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:119:59: note: instantiated from:
    static_assert((std::is_same<decltype(std::vfprintf(fp,"",va)), int>::value), "");
                                                          ^~
cstdio.pass.cpp:121:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(std::vprintf("",va)), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:121:33: note: instantiated from:
    static_assert((std::is_same<decltype(std::vprintf("",va)), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:121:55: note: instantiated from:
    static_assert((std::is_same<decltype(std::vprintf("",va)), int>::value), "");
                                                      ^~
cstdio.pass.cpp:123:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(std::vsnprintf(cp,0,"",va)), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:123:33: note: instantiated from:
    static_assert((std::is_same<decltype(std::vsnprintf(cp,0,"",va)), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:123:62: note: instantiated from:
    static_assert((std::is_same<decltype(std::vsnprintf(cp,0,"",va)), int>::value), "");
                                                             ^~
cstdio.pass.cpp:124:5: warning: format string is empty [-Wformat-zero-length]
    static_assert((std::is_same<decltype(std::vsprintf(cp,"",va)), int>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:124:33: note: instantiated from:
    static_assert((std::is_same<decltype(std::vsprintf(cp,"",va)), int>::value), "");
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cstdio.pass.cpp:124:59: note: instantiated from:
    static_assert((std::is_same<decltype(std::vsprintf(cp,"",va)), int>::value), "");
                                                          ^~
9 warnings generated.
failed 1 tests in /test/input.output/file.streams/c.files
passed 3 tests in /test/input.output/file.streams/c.files
passed 1 tests in /test/input.output/file.streams/fstreams
passed 1 tests in /test/input.output/file.streams/fstreams/filebuf
passed 3 tests in /test/input.output/file.streams/fstreams/filebuf.assign
passed 2 tests in /test/input.output/file.streams/fstreams/filebuf.cons
passed 1 tests in /test/input.output/file.streams/fstreams/filebuf.members
passed 4 tests in /test/input.output/file.streams/fstreams/filebuf.virtuals
passed 1 tests in /test/input.output/file.streams/fstreams/fstream
passed 3 tests in /test/input.output/file.streams/fstreams/fstream.assign
passed 4 tests in /test/input.output/file.streams/fstreams/fstream.cons
passed 4 tests in /test/input.output/file.streams/fstreams/fstream.members
passed 1 tests in /test/input.output/file.streams/fstreams/ifstream
passed 3 tests in /test/input.output/file.streams/fstreams/ifstream.assign
passed 4 tests in /test/input.output/file.streams/fstreams/ifstream.cons
passed 4 tests in /test/input.output/file.streams/fstreams/ifstream.members
passed 1 tests in /test/input.output/file.streams/fstreams/ofstream
passed 3 tests in /test/input.output/file.streams/fstreams/ofstream.assign
passed 4 tests in /test/input.output/file.streams/fstreams/ofstream.cons
passed 4 tests in /test/input.output/file.streams/fstreams/ofstream.members
passed 1 tests in /test/input.output/input.output.general
passed 1 tests in /test/input.output/iostream.format
Assertion failed: (!isDependentType() && "This doesn't make sense for dependent types"), function isConstantSizeType, file /Users/buildslave/zorg/buildbot/smooshlab/slave/build.clang-x86_64-darwin10-miniswb/clang.src/clang/clang/tools/clang/lib/AST/Type.cpp, line 611.
0  clang             0x0000000100b3f7a2
1  clang             0x0000000100b3fc19
2  libSystem.B.dylib 0x00007fff85ee880a _sigtramp + 26
3  libSystem.B.dylib 0xffffffffffffffff _sigtramp + 2047965199
4  libSystem.B.dylib 0x00007fff85f63ef0 __pthread_markcancel + 0
5  clang             0x000000010046f7b3
6  clang             0x0000000100129be4
7  clang             0x000000010019663b
8  clang             0x00000001001928b1
9  clang             0x00000001001924e9
10 clang             0x000000010019632c
11 clang             0x00000001001928a4
12 clang             0x00000001001924e9
13 clang             0x000000010013048e
14 clang             0x000000010019278f
15 clang             0x000000010019632c
16 clang             0x00000001001928a4
17 clang             0x00000001001924e9
18 clang             0x00000001001af33f
19 clang             0x00000001001b6257
20 clang             0x00000001001b42d0
21 clang             0x00000001001b28e0
22 clang             0x00000001001b26f4
23 clang             0x000000010002492e
24 clang             0x00000001001d101d
25 clang             0x0000000100028ad3
26 clang             0x00000001000144cd
27 clang             0x000000010001574f
28 clang             0x0000000100012fac
Stack dump:
0.	Program arguments: /Users/hinnant/Downloads/current-clang/Developer/usr/bin/clang -cc1 -triple i386-apple-darwin10.0.0 -S -disable-free -main-file-name get_money.pass.cpp -pic-level 1 -mdisable-fp-elim -target-cpu yonah -nostdinc++ -resource-dir /Users/hinnant/Downloads/current-clang/Developer/usr/lib/clang/1.5 -I../../../../include -ferror-limit 19 -ftemplate-backtrace-limit 10 -fmessage-length 0 -stack-protector 1 -fblocks -fexceptions -fdiagnostics-show-option -o /var/folders/ax/axmvgG0xF8COmLBHN1a-Ok+++TQ/-Tmp-/cc-fOzHcj.s -x c++ get_money.pass.cpp 
1.	<eof> parser at end of file
2.	Per-file LLVM IR generation
3.	../../../../include/iomanip:280:5: Generating code for declaration 'std::operator>>'
4.	../../../../include/iomanip:286:1: LLVM IR generation of compound statement ('{}')
5.	../../../../include/iomanip:289:5: LLVM IR generation of compound statement ('{}')
clang: error: compiler command failed due to signal 6 (use -v to see invocation)
get_money.pass.cpp failed to compile
Assertion failed: (!isDependentType() && "This doesn't make sense for dependent types"), function isConstantSizeType, file /Users/buildslave/zorg/buildbot/smooshlab/slave/build.clang-x86_64-darwin10-miniswb/clang.src/clang/clang/tools/clang/lib/AST/Type.cpp, line 611.
0  clang             0x0000000100b3f7a2
1  clang             0x0000000100b3fc19
2  libSystem.B.dylib 0x00007fff85ee880a _sigtramp + 26
3  libSystem.B.dylib 0xffffffffffffffff _sigtramp + 2047965199
4  libSystem.B.dylib 0x00007fff85f63ef0 __pthread_markcancel + 0
5  clang             0x000000010046f7b3
6  clang             0x0000000100129be4
7  clang             0x000000010019663b
8  clang             0x00000001001928b1
9  clang             0x00000001001924e9
10 clang             0x000000010019632c
11 clang             0x00000001001928a4
12 clang             0x00000001001924e9
13 clang             0x000000010013048e
14 clang             0x000000010019278f
15 clang             0x000000010019632c
16 clang             0x00000001001928a4
17 clang             0x00000001001924e9
18 clang             0x00000001001af33f
19 clang             0x00000001001b6257
20 clang             0x00000001001b42d0
21 clang             0x00000001001b28e0
22 clang             0x00000001001b26f4
23 clang             0x000000010002492e
24 clang             0x00000001001d101d
25 clang             0x0000000100028ad3
26 clang             0x00000001000144cd
27 clang             0x000000010001574f
28 clang             0x0000000100012fac
29 clang             0x0000000000000021
Stack dump:
0.	Program arguments: /Users/hinnant/Downloads/current-clang/Developer/usr/bin/clang -cc1 -triple i386-apple-darwin10.0.0 -S -disable-free -main-file-name get_time.pass.cpp -pic-level 1 -mdisable-fp-elim -target-cpu yonah -nostdinc++ -resource-dir /Users/hinnant/Downloads/current-clang/Developer/usr/lib/clang/1.5 -I../../../../include -ferror-limit 19 -ftemplate-backtrace-limit 10 -fmessage-length 0 -stack-protector 1 -fblocks -fexceptions -fdiagnostics-show-option -o /var/folders/ax/axmvgG0xF8COmLBHN1a-Ok+++TQ/-Tmp-/cc-8InCYU.s -x c++ get_time.pass.cpp 
1.	<eof> parser at end of file
2.	Per-file LLVM IR generation
3.	../../../../include/iomanip:397:5: Generating code for declaration 'std::operator>>'
4.	../../../../include/iomanip:403:1: LLVM IR generation of compound statement ('{}')
5.	../../../../include/iomanip:406:5: LLVM IR generation of compound statement ('{}')
clang: error: compiler command failed due to signal 6 (use -v to see invocation)
get_time.pass.cpp failed to compile
Assertion failed: (!isDependentType() && "This doesn't make sense for dependent types"), function isConstantSizeType, file /Users/buildslave/zorg/buildbot/smooshlab/slave/build.clang-x86_64-darwin10-miniswb/clang.src/clang/clang/tools/clang/lib/AST/Type.cpp, line 611.
0  clang             0x0000000100b3f7a2
1  clang             0x0000000100b3fc19
2  libSystem.B.dylib 0x00007fff85ee880a _sigtramp + 26
3  clang             0x0000000100000000 __dso_handle + 0
4  libSystem.B.dylib 0x00007fff85f63ef0 __pthread_markcancel + 0
5  clang             0x000000010046f7b3
6  clang             0x0000000100129be4
7  clang             0x000000010019663b
8  clang             0x00000001001928b1
9  clang             0x00000001001924e9
10 clang             0x000000010019632c
11 clang             0x00000001001928a4
12 clang             0x00000001001924e9
13 clang             0x000000010013048e
14 clang             0x000000010019278f
15 clang             0x000000010019632c
16 clang             0x00000001001928a4
17 clang             0x00000001001924e9
18 clang             0x00000001001af33f
19 clang             0x00000001001b6257
20 clang             0x00000001001b42d0
21 clang             0x00000001001b28e0
22 clang             0x00000001001b26f4
23 clang             0x000000010002492e
24 clang             0x00000001001d101d
25 clang             0x0000000100028ad3
26 clang             0x00000001000144cd
27 clang             0x000000010001574f
28 clang             0x0000000100012fac
Stack dump:
0.	Program arguments: /Users/hinnant/Downloads/current-clang/Developer/usr/bin/clang -cc1 -triple i386-apple-darwin10.0.0 -S -disable-free -main-file-name put_money.pass.cpp -pic-level 1 -mdisable-fp-elim -target-cpu yonah -nostdinc++ -resource-dir /Users/hinnant/Downloads/current-clang/Developer/usr/lib/clang/1.5 -I../../../../include -ferror-limit 19 -ftemplate-backtrace-limit 10 -fmessage-length 0 -stack-protector 1 -fblocks -fexceptions -fdiagnostics-show-option -o /var/folders/ax/axmvgG0xF8COmLBHN1a-Ok+++TQ/-Tmp-/cc-TqnHfq.s -x c++ put_money.pass.cpp 
1.	<eof> parser at end of file
2.	Per-file LLVM IR generation
3.	../../../../include/iomanip:339:5: Generating code for declaration 'std::operator<<'
4.	../../../../include/iomanip:345:1: LLVM IR generation of compound statement ('{}')
5.	../../../../include/iomanip:348:5: LLVM IR generation of compound statement ('{}')
clang: error: compiler command failed due to signal 6 (use -v to see invocation)
put_money.pass.cpp failed to compile
Assertion failed: (!isDependentType() && "This doesn't make sense for dependent types"), function isConstantSizeType, file /Users/buildslave/zorg/buildbot/smooshlab/slave/build.clang-x86_64-darwin10-miniswb/clang.src/clang/clang/tools/clang/lib/AST/Type.cpp, line 611.
0  clang             0x0000000100b3f7a2
1  clang             0x0000000100b3fc19
2  libSystem.B.dylib 0x00007fff85ee880a _sigtramp + 26
3  clang             0x0000000100000000 __dso_handle + 0
4  libSystem.B.dylib 0x00007fff85f63ef0 __pthread_markcancel + 0
5  clang             0x000000010046f7b3
6  clang             0x0000000100129be4
7  clang             0x000000010019663b
8  clang             0x00000001001928b1
9  clang             0x00000001001924e9
10 clang             0x000000010019632c
11 clang             0x00000001001928a4
12 clang             0x00000001001924e9
13 clang             0x000000010013048e
14 clang             0x000000010019278f
15 clang             0x000000010019632c
16 clang             0x00000001001928a4
17 clang             0x00000001001924e9
18 clang             0x00000001001af33f
19 clang             0x00000001001b6257
20 clang             0x00000001001b42d0
21 clang             0x00000001001b28e0
22 clang             0x00000001001b26f4
23 clang             0x000000010002492e
24 clang             0x00000001001d101d
25 clang             0x0000000100028ad3
26 clang             0x00000001000144cd
27 clang             0x000000010001574f
28 clang             0x0000000100012fac
29 clang             0x0000000000000021
Stack dump:
0.	Program arguments: /Users/hinnant/Downloads/current-clang/Developer/usr/bin/clang -cc1 -triple i386-apple-darwin10.0.0 -S -disable-free -main-file-name put_time.pass.cpp -pic-level 1 -mdisable-fp-elim -target-cpu yonah -nostdinc++ -resource-dir /Users/hinnant/Downloads/current-clang/Developer/usr/lib/clang/1.5 -I../../../../include -ferror-limit 19 -ftemplate-backtrace-limit 10 -fmessage-length 0 -stack-protector 1 -fblocks -fexceptions -fdiagnostics-show-option -o /var/folders/ax/axmvgG0xF8COmLBHN1a-Ok+++TQ/-Tmp-/cc-deFcBA.s -x c++ put_time.pass.cpp 
1.	<eof> parser at end of file
2.	Per-file LLVM IR generation
3.	../../../../include/iomanip:457:5: Generating code for declaration 'std::operator<<'
4.	../../../../include/iomanip:463:1: LLVM IR generation of compound statement ('{}')
5.	../../../../include/iomanip:466:5: LLVM IR generation of compound statement ('{}')
clang: error: compiler command failed due to signal 6 (use -v to see invocation)
put_time.pass.cpp failed to compile
failed 4 tests in /test/input.output/iostream.format/ext.manip
passed 1 tests in /test/input.output/iostream.format/input.streams
passed 1 tests in /test/input.output/iostream.format/input.streams/iostreamclass
passed 2 tests in /test/input.output/iostream.format/input.streams/iostreamclass/iostream.assign
passed 2 tests in /test/input.output/iostream.format/input.streams/iostreamclass/iostream.cons
passed 1 tests in /test/input.output/iostream.format/input.streams/iostreamclass/iostream.dest
passed 1 tests in /test/input.output/iostream.format/input.streams/istream
passed 2 tests in /test/input.output/iostream.format/input.streams/istream/istream.assign
passed 2 tests in /test/input.output/iostream.format/input.streams/istream/istream.cons
passed 1 tests in /test/input.output/iostream.format/input.streams/istream/istream::sentry
passed 1 tests in /test/input.output/iostream.format/input.streams/istream.formatted
passed 13 tests in /test/input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic
passed 1 tests in /test/input.output/iostream.format/input.streams/istream.formatted/istream.formatted.reqmts
passed 10 tests in /test/input.output/iostream.format/input.streams/istream.formatted/istream::extractors
passed 1 tests in /test/input.output/iostream.format/input.streams/istream.manip
passed 1 tests in /test/input.output/iostream.format/input.streams/istream.rvalue
passed 18 tests in /test/input.output/iostream.format/input.streams/istream.unformatted
passed 1 tests in /test/input.output/iostream.format/output.streams
passed 1 tests in /test/input.output/iostream.format/output.streams/ostream
passed 2 tests in /test/input.output/iostream.format/output.streams/ostream.assign
passed 2 tests in /test/input.output/iostream.format/output.streams/ostream.cons
passed 1 tests in /test/input.output/iostream.format/output.streams/ostream.formatted
passed 1 tests in /test/input.output/iostream.format/output.streams/ostream.formatted/ostream.formatted.reqmts
passed 4 tests in /test/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters
passed 13 tests in /test/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic
passed 10 tests in /test/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character
passed 3 tests in /test/input.output/iostream.format/output.streams/ostream.manip
passed 1 tests in /test/input.output/iostream.format/output.streams/ostream.rvalue
passed 3 tests in /test/input.output/iostream.format/output.streams/ostream.seeks
passed 3 tests in /test/input.output/iostream.format/output.streams/ostream.unformatted
passed 2 tests in /test/input.output/iostream.format/output.streams/ostream::sentry
passed 7 tests in /test/input.output/iostream.format/std.manip
passed 2 tests in /test/input.output/iostream.forward
passed 1 tests in /test/input.output/iostream.objects
passed 4 tests in /test/input.output/iostream.objects/narrow.stream.objects
passed 4 tests in /test/input.output/iostream.objects/wide.stream.objects
passed 1 tests in /test/input.output/iostreams.base
passed 1 tests in /test/input.output/iostreams.base/fpos
passed 1 tests in /test/input.output/iostreams.base/fpos/fpos.members
passed 7 tests in /test/input.output/iostreams.base/fpos/fpos.operations
passed 1 tests in /test/input.output/iostreams.base/ios
passed 1 tests in /test/input.output/iostreams.base/ios/basic.ios.cons
passed 13 tests in /test/input.output/iostreams.base/ios/basic.ios.members
passed 11 tests in /test/input.output/iostreams.base/ios/iostate.flags
passed 1 tests in /test/input.output/iostreams.base/ios.base
passed 9 tests in /test/input.output/iostreams.base/ios.base/fmtflags.state
passed 1 tests in /test/input.output/iostreams.base/ios.base/ios.base.callback
passed 1 tests in /test/input.output/iostreams.base/ios.base/ios.base.cons
passed 2 tests in /test/input.output/iostreams.base/ios.base/ios.base.locales
passed 3 tests in /test/input.output/iostreams.base/ios.base/ios.base.storage
passed 1 tests in /test/input.output/iostreams.base/ios.base/ios.members.static
passed 1 tests in /test/input.output/iostreams.base/ios.base/ios.types
passed 1 tests in /test/input.output/iostreams.base/ios.base/ios.types/ios::Init
passed 2 tests in /test/input.output/iostreams.base/ios.base/ios.types/ios::failure
passed 1 tests in /test/input.output/iostreams.base/ios.base/ios.types/ios::fmtflags
passed 1 tests in /test/input.output/iostreams.base/ios.base/ios.types/ios::iostate
passed 1 tests in /test/input.output/iostreams.base/ios.base/ios.types/ios::openmode
passed 1 tests in /test/input.output/iostreams.base/ios.base/ios.types/ios::seekdir
passed 1 tests in /test/input.output/iostreams.base/std.ios.manip
passed 3 tests in /test/input.output/iostreams.base/std.ios.manip/adjustfield.manip
passed 3 tests in /test/input.output/iostreams.base/std.ios.manip/basefield.manip
passed 3 tests in /test/input.output/iostreams.base/std.ios.manip/error.reporting
passed 4 tests in /test/input.output/iostreams.base/std.ios.manip/floatfield.manip
passed 14 tests in /test/input.output/iostreams.base/std.ios.manip/fmtflags.manip
passed 2 tests in /test/input.output/iostreams.base/stream.types
passed 1 tests in /test/input.output/iostreams.requirements
passed 1 tests in /test/input.output/iostreams.requirements/iostream.limits.imbue
passed 1 tests in /test/input.output/iostreams.requirements/iostreams.limits.pos
passed 1 tests in /test/input.output/iostreams.requirements/iostreams.threadsafety
passed 1 tests in /test/input.output/stream.buffers
passed 1 tests in /test/input.output/stream.buffers/streambuf
passed 4 tests in /test/input.output/stream.buffers/streambuf/streambuf.cons
passed 1 tests in /test/input.output/stream.buffers/streambuf/streambuf.members
passed 4 tests in /test/input.output/stream.buffers/streambuf/streambuf.members/streambuf.buffer
passed 1 tests in /test/input.output/stream.buffers/streambuf/streambuf.members/streambuf.locales
passed 5 tests in /test/input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.get
passed 2 tests in /test/input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.pback
passed 2 tests in /test/input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.put
passed 1 tests in /test/input.output/stream.buffers/streambuf/streambuf.protected
passed 2 tests in /test/input.output/stream.buffers/streambuf/streambuf.protected/streambuf.assign
passed 2 tests in /test/input.output/stream.buffers/streambuf/streambuf.protected/streambuf.get.area
passed 2 tests in /test/input.output/stream.buffers/streambuf/streambuf.protected/streambuf.put.area
passed 1 tests in /test/input.output/stream.buffers/streambuf/streambuf.virtuals
passed 1 tests in /test/input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.buffer
passed 4 tests in /test/input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.get
passed 1 tests in /test/input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.locales
passed 1 tests in /test/input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.pback
passed 2 tests in /test/input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.put
passed 1 tests in /test/input.output/stream.buffers/streambuf.reqts
passed 1 tests in /test/input.output/string.streams
passed 1 tests in /test/input.output/string.streams/istringstream
passed 3 tests in /test/input.output/string.streams/istringstream/istringstream.assign
passed 3 tests in /test/input.output/string.streams/istringstream/istringstream.cons
passed 1 tests in /test/input.output/string.streams/istringstream/istringstream.members
passed 1 tests in /test/input.output/string.streams/ostringstream
passed 3 tests in /test/input.output/string.streams/ostringstream/ostringstream.assign
passed 3 tests in /test/input.output/string.streams/ostringstream/ostringstream.cons
passed 1 tests in /test/input.output/string.streams/ostringstream/ostringstream.members
passed 1 tests in /test/input.output/string.streams/stringbuf
passed 3 tests in /test/input.output/string.streams/stringbuf/stringbuf.assign
passed 3 tests in /test/input.output/string.streams/stringbuf/stringbuf.cons
passed 1 tests in /test/input.output/string.streams/stringbuf/stringbuf.members
passed 6 tests in /test/input.output/string.streams/stringbuf/stringbuf.virtuals
passed 1 tests in /test/input.output/string.streams/stringstream
passed 3 tests in /test/input.output/string.streams/stringstream.cons
passed 3 tests in /test/input.output/string.streams/stringstream.cons/stringstream.assign
passed 1 tests in /test/input.output/string.streams/stringstream.members
passed 1 tests in /test/iterators
passed 1 tests in /test/iterators/iterator.primitives
passed 1 tests in /test/iterators/iterator.primitives/iterator.basic
passed 4 tests in /test/iterators/iterator.primitives/iterator.operations
passed 4 tests in /test/iterators/iterator.primitives/iterator.traits
passed 5 tests in /test/iterators/iterator.primitives/std.iterator.tags
passed 1 tests in /test/iterators/iterator.requirements
passed 1 tests in /test/iterators/iterator.requirements/bidirectional.iterators
passed 1 tests in /test/iterators/iterator.requirements/forward.iterators
passed 1 tests in /test/iterators/iterator.requirements/input.iterators
passed 1 tests in /test/iterators/iterator.requirements/iterator.iterators
passed 1 tests in /test/iterators/iterator.requirements/iterator.requirements.general
passed 1 tests in /test/iterators/iterator.requirements/output.iterators
passed 1 tests in /test/iterators/iterator.requirements/random.access.iterators
passed 1 tests in /test/iterators/iterator.synopsis
passed 1 tests in /test/iterators/iterators.general
passed 1 tests in /test/iterators/predef.iterators
passed 1 tests in /test/iterators/predef.iterators/insert.iterators
passed 1 tests in /test/iterators/predef.iterators/insert.iterators/back.insert.iter.ops
passed 2 tests in /test/iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.cons
passed 2 tests in /test/iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.op++
passed 2 tests in /test/iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.op=
passed 1 tests in /test/iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.op_astrk
passed 1 tests in /test/iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.inserter
passed 1 tests in /test/iterators/predef.iterators/insert.iterators/back.insert.iterator
passed 1 tests in /test/iterators/predef.iterators/insert.iterators/front.insert.iter.ops
passed 2 tests in /test/iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.cons
passed 2 tests in /test/iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.op++
passed 2 tests in /test/iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.op=
passed 1 tests in /test/iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.op_astrk
passed 1 tests in /test/iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.inserter
passed 1 tests in /test/iterators/predef.iterators/insert.iterators/front.insert.iterator
passed 1 tests in /test/iterators/predef.iterators/insert.iterators/insert.iter.ops
passed 1 tests in /test/iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.cons
passed 2 tests in /test/iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.op++
passed 2 tests in /test/iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.op=
passed 1 tests in /test/iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.op_astrk
passed 1 tests in /test/iterators/predef.iterators/insert.iterators/insert.iter.ops/inserter
passed 1 tests in /test/iterators/predef.iterators/insert.iterators/insert.iterator
passed 1 tests in /test/iterators/predef.iterators/move.iterators
passed 1 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops
passed 3 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.nonmember
passed 1 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.+
passed 1 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.+=
passed 1 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.-
passed 1 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.-=
passed 6 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp
passed 5 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.const
passed 1 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.conv
passed 2 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.decr
passed 2 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.incr
passed 1 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.index
passed 1 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.ref
passed 1 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.star
passed 2 tests in /test/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op=
passed 1 tests in /test/iterators/predef.iterators/move.iterators/move.iter.requirements
passed 1 tests in /test/iterators/predef.iterators/move.iterators/move.iterator
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops
passed 5 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.cons
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.conv
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op!=
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op+
passed 2 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op++
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op+=
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op-
passed 2 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op--
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op-=
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op.star
passed 2 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op=
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op==
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opdiff
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opgt
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opgt=
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opindex
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.oplt
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.oplt=
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opref
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opsum
passed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iter.requirements
types.pass.cpp:66:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert((std::is_same<typename R::pointer, It>::value), "");
    ^
In file included from types.pass.cpp:42:
In file included from ../../../../../include/iterator:334:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
types.pass.cpp:72:5: note: in instantiation of function template specialization 'test<bidirectional_iterator<char *> >' requested here
    test<bidirectional_iterator<char*> >();
    ^
In file included from types.pass.cpp:42:
In file included from ../../../../../include/iterator:334:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
types.pass.cpp:66:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert((std::is_same<typename R::pointer, It>::value), "");
    ^
In file included from types.pass.cpp:42:
In file included from ../../../../../include/iterator:334:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
types.pass.cpp:73:5: note: in instantiation of function template specialization 'test<random_access_iterator<char *> >' requested here
    test<random_access_iterator<char*> >();
    ^
In file included from types.pass.cpp:42:
In file included from ../../../../../include/iterator:334:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
2 errors generated.
types.pass.cpp failed to compile
failed 1 tests in /test/iterators/predef.iterators/reverse.iterators/reverse.iterator
passed 1 tests in /test/iterators/stream.iterators
passed 1 tests in /test/iterators/stream.iterators/istream.iterator
passed 3 tests in /test/iterators/stream.iterators/istream.iterator/istream.iterator.cons
passed 5 tests in /test/iterators/stream.iterators/istream.iterator/istream.iterator.ops
passed 1 tests in /test/iterators/stream.iterators/istreambuf.iterator
passed 4 tests in /test/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons
passed 1 tests in /test/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator::equal
passed 1 tests in /test/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator::op!=
passed 1 tests in /test/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator::op++
passed 1 tests in /test/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator::op==
passed 3 tests in /test/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator::op_astrk
passed 1 tests in /test/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator::proxy
passed 6 tests in /test/iterators/stream.iterators/iterator.range
passed 1 tests in /test/iterators/stream.iterators/ostream.iterator
passed 3 tests in /test/iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des
passed 3 tests in /test/iterators/stream.iterators/ostream.iterator/ostream.iterator.ops
passed 1 tests in /test/iterators/stream.iterators/ostreambuf.iterator
passed 2 tests in /test/iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.cons
passed 4 tests in /test/iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops
passed 1 tests in /test/language.support
passed 1 tests in /test/language.support/cstdint
passed 1 tests in /test/language.support/cstdint/cstdint.syn
passed 1 tests in /test/language.support/support.dynamic
passed 1 tests in /test/language.support/support.dynamic/alloc.errors
passed 1 tests in /test/language.support/support.dynamic/alloc.errors/bad.alloc
passed 1 tests in /test/language.support/support.dynamic/alloc.errors/new.badlength
passed 1 tests in /test/language.support/support.dynamic/alloc.errors/new.handler
passed 1 tests in /test/language.support/support.dynamic/alloc.errors/set.new.handler
passed 1 tests in /test/language.support/support.dynamic/new.delete
passed 4 tests in /test/language.support/support.dynamic/new.delete/new.delete.array
passed 1 tests in /test/language.support/support.dynamic/new.delete/new.delete.dataraces
passed 2 tests in /test/language.support/support.dynamic/new.delete/new.delete.placement
passed 4 tests in /test/language.support/support.dynamic/new.delete/new.delete.single
passed 1 tests in /test/language.support/support.exception
not implemented:  /test/language.support/support.exception/except.nested
passed 1 tests in /test/language.support/support.exception/exception
passed 1 tests in /test/language.support/support.exception/exception.terminate
passed 1 tests in /test/language.support/support.exception/exception.terminate/set.terminate
passed 1 tests in /test/language.support/support.exception/exception.terminate/terminate
passed 1 tests in /test/language.support/support.exception/exception.terminate/terminate.handler
passed 1 tests in /test/language.support/support.exception/exception.unexpected
passed 1 tests in /test/language.support/support.exception/exception.unexpected/bad.exception
passed 1 tests in /test/language.support/support.exception/exception.unexpected/set.unexpected
passed 1 tests in /test/language.support/support.exception/exception.unexpected/unexpected
passed 1 tests in /test/language.support/support.exception/exception.unexpected/unexpected.handler
passed 4 tests in /test/language.support/support.exception/propagation
passed 1 tests in /test/language.support/support.exception/uncaught
passed 1 tests in /test/language.support/support.general
passed 2 tests in /test/language.support/support.initlist
passed 1 tests in /test/language.support/support.initlist/support.initlist.access
passed 1 tests in /test/language.support/support.initlist/support.initlist.cons
not implemented:  /test/language.support/support.initlist/support.initlist.range
passed 1 tests in /test/language.support/support.limits
passed 4 tests in /test/language.support/support.limits/c.limits
passed 2 tests in /test/language.support/support.limits/limits
passed 1 tests in /test/language.support/support.limits/limits/denorm.style
passed 1 tests in /test/language.support/support.limits/limits/numeric.limits
passed 31 tests in /test/language.support/support.limits/limits/numeric.limits.members
passed 1 tests in /test/language.support/support.limits/limits/numeric.special
passed 1 tests in /test/language.support/support.limits/limits/round.style
passed 1 tests in /test/language.support/support.rtti
passed 1 tests in /test/language.support/support.rtti/bad.cast
passed 1 tests in /test/language.support/support.rtti/bad.typeid
passed 2 tests in /test/language.support/support.rtti/type.info
passed 12 tests in /test/language.support/support.runtime
quick_exit.pass.cpp:33:10: error: no member named 'at_quick_exit' in namespace 'std'
    std::at_quick_exit(f);
    ~~~~~^
quick_exit.pass.cpp:34:5: error: use of undeclared identifier 'quick_exit'
    quick_exit(0);
    ^
2 errors generated.
quick_exit.pass.cpp failed to compile
failed 1 tests in /test/language.support/support.start.term
passed 7 tests in /test/language.support/support.types
passed 1 tests in /test/localization
passed 2 tests in /test/localization/c.locales
passed 1 tests in /test/localization/locale.categories
passed 1 tests in /test/localization/locale.categories/category.collate
passed 2 tests in /test/localization/locale.categories/category.collate/locale.collate
passed 3 tests in /test/localization/locale.categories/category.collate/locale.collate/locale.collate.members
passed 1 tests in /test/localization/locale.categories/category.collate/locale.collate/locale.collate.virtuals
passed 4 tests in /test/localization/locale.categories/category.collate/locale.collate.byname
passed 1 tests in /test/localization/locale.categories/category.ctype
passed 1 tests in /test/localization/locale.categories/category.ctype/facet.ctype.special
passed 1 tests in /test/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.dtor
passed 14 tests in /test/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members
passed 1 tests in /test/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.statics
passed 1 tests in /test/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.virtuals
passed 9 tests in /test/localization/locale.categories/category.ctype/locale.codecvt
passed 29 tests in /test/localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members
passed 1 tests in /test/localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.virtuals
passed 4 tests in /test/localization/locale.categories/category.ctype/locale.codecvt.byname
passed 2 tests in /test/localization/locale.categories/category.ctype/locale.ctype
passed 12 tests in /test/localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members
passed 1 tests in /test/localization/locale.categories/category.ctype/locale.ctype/locale.ctype.virtuals
passed 13 tests in /test/localization/locale.categories/category.ctype/locale.ctype.byname
passed 1 tests in /test/localization/locale.categories/category.messages
passed 3 tests in /test/localization/locale.categories/category.messages/locale.messages
passed 1 tests in /test/localization/locale.categories/category.messages/locale.messages/locale.messages.members
passed 1 tests in /test/localization/locale.categories/category.messages/locale.messages/locale.messages.virtuals
passed 1 tests in /test/localization/locale.categories/category.messages/locale.messages.byname
passed 1 tests in /test/localization/locale.categories/category.monetary
passed 2 tests in /test/localization/locale.categories/category.monetary/locale.money.get
passed 5 tests in /test/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members
passed 1 tests in /test/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.virtuals
passed 2 tests in /test/localization/locale.categories/category.monetary/locale.money.put
passed 5 tests in /test/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members
passed 1 tests in /test/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.virtuals
passed 3 tests in /test/localization/locale.categories/category.monetary/locale.moneypunct
passed 9 tests in /test/localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members
passed 1 tests in /test/localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.virtuals
passed 9 tests in /test/localization/locale.categories/category.monetary/locale.moneypunct.byname
passed 1 tests in /test/localization/locale.categories/category.numeric
passed 2 tests in /test/localization/locale.categories/category.numeric/locale.nm.put
passed 8 tests in /test/localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members
passed 1 tests in /test/localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.virtuals
passed 2 tests in /test/localization/locale.categories/category.numeric/locale.num.get
get_double.pass.cpp:122:9: warning: hexadecimal floating constants are a C99 feature that is incompatible with C++0x
        assert(v == 0x125p-1);
        ^
get_double.pass.cpp:122:21: note: instantiated from:
        assert(v == 0x125p-1);
                    ^
1 warning generated.
get_float.pass.cpp:110:9: warning: hexadecimal floating constants are a C99 feature that is incompatible with C++0x
        assert(v == 0x125p-1);
        ^
get_float.pass.cpp:110:21: note: instantiated from:
        assert(v == 0x125p-1);
                    ^
1 warning generated.
get_long_double.pass.cpp:110:9: warning: hexadecimal floating constants are a C99 feature that is incompatible with C++0x
        assert(v == 0x125p-1);
        ^
get_long_double.pass.cpp:110:21: note: instantiated from:
        assert(v == 0x125p-1);
                    ^
1 warning generated.
passed 11 tests in /test/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members
passed 1 tests in /test/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.virtuals
passed 1 tests in /test/localization/locale.categories/category.time
passed 3 tests in /test/localization/locale.categories/category.time/locale.time.get
passed 12 tests in /test/localization/locale.categories/category.time/locale.time.get/locale.time.get.members
passed 1 tests in /test/localization/locale.categories/category.time/locale.time.get/locale.time.get.virtuals
get_one_wide.pass.cpp:112:27: warning: hex escape sequence out of range
                          "\x434\x435\x43A\x430\x431\x440\x44F"
                          ^
get_one_wide.pass.cpp:112:27: warning: hex escape sequence out of range
get_one_wide.pass.cpp:112:27: warning: hex escape sequence out of range
get_one_wide.pass.cpp:112:27: warning: hex escape sequence out of range
get_one_wide.pass.cpp:112:27: warning: hex escape sequence out of range
get_one_wide.pass.cpp:112:27: warning: hex escape sequence out of range
get_one_wide.pass.cpp:112:27: warning: hex escape sequence out of range
get_one_wide.pass.cpp:114:27: warning: hex escape sequence out of range
                          "\x433"
                          ^
get_one_wide.pass.cpp:160:35: warning: hex escape sequence out of range
        const wchar_t in[] = L"23""\x65F6""55""\x5206""59""\x79D2";
                                  ^
get_one_wide.pass.cpp:160:47: warning: hex escape sequence out of range
        const wchar_t in[] = L"23""\x65F6""55""\x5206""59""\x79D2";
                                              ^
get_one_wide.pass.cpp:160:59: warning: hex escape sequence out of range
        const wchar_t in[] = L"23""\x65F6""55""\x5206""59""\x79D2";
                                                          ^
11 warnings generated.
Assertion failed: (i.base() == in+sizeof(in)/sizeof(in[0])-1), function main, file get_one_wide.pass.cpp, line 119.
./testit: line 97: 66093 Abort trap              ./a.out
get_one_wide.pass.cpp failed at run time
failed 1 tests in /test/localization/locale.categories/category.time/locale.time.get.byname
passed 13 tests in /test/localization/locale.categories/category.time/locale.time.get.byname
passed 2 tests in /test/localization/locale.categories/category.time/locale.time.put
passed 2 tests in /test/localization/locale.categories/category.time/locale.time.put/locale.time.put.members
passed 1 tests in /test/localization/locale.categories/category.time/locale.time.put/locale.time.put.virtuals
passed 1 tests in /test/localization/locale.categories/category.time/locale.time.put.byname
passed 1 tests in /test/localization/locale.categories/facet.numpunct
passed 2 tests in /test/localization/locale.categories/facet.numpunct/locale.numpunct
passed 5 tests in /test/localization/locale.categories/facet.numpunct/locale.numpunct/facet.numpunct.members
passed 1 tests in /test/localization/locale.categories/facet.numpunct/locale.numpunct/facet.numpunct.virtuals
passed 3 tests in /test/localization/locale.categories/facet.numpunct/locale.numpunct.byname
passed 1 tests in /test/localization/locale.categories/facets.examples
not implemented:  /test/localization/locale.stdcvt
passed 1 tests in /test/localization/locale.syn
passed 1 tests in /test/localization/locales
passed 1 tests in /test/localization/locales/locale
Assertion failed: (new_called == 0), function main, file char_pointer.pass.cpp, line 111.
./testit: line 97: 66376 Abort trap              ./a.out
char_pointer.pass.cpp failed at run time
failed 1 tests in /test/localization/locales/locale/locale.cons
passed 8 tests in /test/localization/locales/locale/locale.cons
passed 2 tests in /test/localization/locales/locale/locale.members
passed 2 tests in /test/localization/locales/locale/locale.operators
passed 2 tests in /test/localization/locales/locale/locale.statics
passed 1 tests in /test/localization/locales/locale/locale.types
passed 1 tests in /test/localization/locales/locale/locale.types/locale.category
passed 1 tests in /test/localization/locales/locale/locale.types/locale.facet
passed 1 tests in /test/localization/locales/locale/locale.types/locale.id
passed 1 tests in /test/localization/locales/locale.convenience
passed 11 tests in /test/localization/locales/locale.convenience/classification
passed 1 tests in /test/localization/locales/locale.convenience/conversions
not implemented:  /test/localization/locales/locale.convenience/conversions/conversions.buffer
passed 2 tests in /test/localization/locales/locale.convenience/conversions/conversions.character
not implemented:  /test/localization/locales/locale.convenience/conversions/conversions.string
passed 2 tests in /test/localization/locales/locale.global.templates
passed 1 tests in /test/localization/localization.general
passed 1 tests in /test/numerics
cmath.pass.cpp:1106:5: warning: hexadecimal floating constants are a C99 feature that is incompatible with C++0x
    assert(std::nextafter(0,1) == 0x1p-1074);
    ^
cmath.pass.cpp:1106:35: note: instantiated from:
    assert(std::nextafter(0,1) == 0x1p-1074);
                                  ^
cmath.pass.cpp:1124:5: warning: hexadecimal floating constants are a C99 feature that is incompatible with C++0x
    assert(std::nexttoward(0, 1) == 0x1p-1074);
    ^
cmath.pass.cpp:1124:37: note: instantiated from:
    assert(std::nexttoward(0, 1) == 0x1p-1074);
                                    ^
2 warnings generated.
passed 4 tests in /test/numerics/c.math
passed 1 tests in /test/numerics/cfenv
passed 1 tests in /test/numerics/cfenv/cfenv.syn
passed 2 tests in /test/numerics/complex.number
passed 1 tests in /test/numerics/complex.number/ccmplx
passed 7 tests in /test/numerics/complex.number/cmplx.over
passed 1 tests in /test/numerics/complex.number/complex
passed 10 tests in /test/numerics/complex.number/complex.member.ops
passed 2 tests in /test/numerics/complex.number/complex.members
passed 22 tests in /test/numerics/complex.number/complex.ops
passed 12 tests in /test/numerics/complex.number/complex.special
passed 1 tests in /test/numerics/complex.number/complex.synopsis
passed 19 tests in /test/numerics/complex.number/complex.transcendentals
passed 8 tests in /test/numerics/complex.number/complex.value.ops
passed 1 tests in /test/numerics/numarray
passed 1 tests in /test/numerics/numarray/class.gslice
passed 1 tests in /test/numerics/numarray/class.gslice/gslice.access
passed 2 tests in /test/numerics/numarray/class.gslice/gslice.cons
passed 1 tests in /test/numerics/numarray/class.slice
passed 2 tests in /test/numerics/numarray/class.slice/cons.slice
passed 1 tests in /test/numerics/numarray/class.slice/slice.access
passed 2 tests in /test/numerics/numarray/template.gslice.array
passed 2 tests in /test/numerics/numarray/template.gslice.array/gslice.array.assign
passed 10 tests in /test/numerics/numarray/template.gslice.array/gslice.array.comp.assign
passed 1 tests in /test/numerics/numarray/template.gslice.array/gslice.array.fill
passed 2 tests in /test/numerics/numarray/template.indirect.array
passed 2 tests in /test/numerics/numarray/template.indirect.array/indirect.array.assign
passed 10 tests in /test/numerics/numarray/template.indirect.array/indirect.array.comp.assign
passed 1 tests in /test/numerics/numarray/template.indirect.array/indirect.array.fill
passed 2 tests in /test/numerics/numarray/template.mask.array
passed 2 tests in /test/numerics/numarray/template.mask.array/mask.array.assign
passed 10 tests in /test/numerics/numarray/template.mask.array/mask.array.comp.assign
passed 1 tests in /test/numerics/numarray/template.mask.array/mask.array.fill
passed 2 tests in /test/numerics/numarray/template.slice.array
passed 2 tests in /test/numerics/numarray/template.slice.array/slice.arr.assign
passed 10 tests in /test/numerics/numarray/template.slice.array/slice.arr.comp.assign
passed 1 tests in /test/numerics/numarray/template.slice.array/slice.arr.fill
passed 1 tests in /test/numerics/numarray/template.valarray
passed 2 tests in /test/numerics/numarray/template.valarray/valarray.access
passed 8 tests in /test/numerics/numarray/template.valarray/valarray.assign
passed 20 tests in /test/numerics/numarray/template.valarray/valarray.cassign
passed 11 tests in /test/numerics/numarray/template.valarray/valarray.cons
passed 10 tests in /test/numerics/numarray/template.valarray/valarray.members
passed 8 tests in /test/numerics/numarray/template.valarray/valarray.sub
passed 4 tests in /test/numerics/numarray/template.valarray/valarray.unary
passed 1 tests in /test/numerics/numarray/valarray.nonmembers
passed 30 tests in /test/numerics/numarray/valarray.nonmembers/valarray.binary
passed 24 tests in /test/numerics/numarray/valarray.nonmembers/valarray.comparison
passed 1 tests in /test/numerics/numarray/valarray.nonmembers/valarray.special
passed 20 tests in /test/numerics/numarray/valarray.nonmembers/valarray.transcend
passed 4 tests in /test/numerics/numarray/valarray.range
passed 1 tests in /test/numerics/numarray/valarray.syn
passed 1 tests in /test/numerics/numeric.ops
passed 2 tests in /test/numerics/numeric.ops/accumulate
passed 2 tests in /test/numerics/numeric.ops/adjacent.difference
passed 2 tests in /test/numerics/numeric.ops/inner.product
not implemented:  /test/numerics/numeric.ops/numeric.iota
passed 2 tests in /test/numerics/numeric.ops/partial.sum
passed 1 tests in /test/numerics/numeric.requirements
passed 1 tests in /test/numerics/numerics.general
not implemented:  /test/numerics/rand
not implemented:  /test/numerics/rand/rand.adapt
not implemented:  /test/numerics/rand/rand.adapt/rand.adapt.disc
not implemented:  /test/numerics/rand/rand.adapt/rand.adapt.ibits
not implemented:  /test/numerics/rand/rand.adapt/rand.adapt.shuf
not implemented:  /test/numerics/rand/rand.device
not implemented:  /test/numerics/rand/rand.dis
not implemented:  /test/numerics/rand/rand.dis/rand.dist.bern
not implemented:  /test/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli
not implemented:  /test/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin
not implemented:  /test/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo
not implemented:  /test/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin
not implemented:  /test/numerics/rand/rand.dis/rand.dist.norm
not implemented:  /test/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy
not implemented:  /test/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq
not implemented:  /test/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f
not implemented:  /test/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal
not implemented:  /test/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal
not implemented:  /test/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t
not implemented:  /test/numerics/rand/rand.dis/rand.dist.pois
not implemented:  /test/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp
not implemented:  /test/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme
not implemented:  /test/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma
not implemented:  /test/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson
not implemented:  /test/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull
not implemented:  /test/numerics/rand/rand.dis/rand.dist.samp
not implemented:  /test/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete
not implemented:  /test/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.genpdf
not implemented:  /test/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst
not implemented:  /test/numerics/rand/rand.dis/rand.dist.uni
not implemented:  /test/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int
not implemented:  /test/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real
not implemented:  /test/numerics/rand/rand.eng
not implemented:  /test/numerics/rand/rand.eng/rand.eng.lcong
not implemented:  /test/numerics/rand/rand.eng/rand.eng.mers
not implemented:  /test/numerics/rand/rand.eng/rand.eng.sub
not implemented:  /test/numerics/rand/rand.predef
not implemented:  /test/numerics/rand/rand.req
not implemented:  /test/numerics/rand/rand.req/rand.req.adapt
not implemented:  /test/numerics/rand/rand.req/rand.req.dst
not implemented:  /test/numerics/rand/rand.req/rand.req.eng
not implemented:  /test/numerics/rand/rand.req/rand.req.genl
not implemented:  /test/numerics/rand/rand.req/rand.req.seedseq
not implemented:  /test/numerics/rand/rand.req/rand.req.urng
not implemented:  /test/numerics/rand/rand.synopsis
not implemented:  /test/numerics/rand/rand.util
not implemented:  /test/numerics/rand/rand.util/rand.util.canonical
not implemented:  /test/numerics/rand/rand.util/rand.util.seedseq
not implemented:  /test/re
not implemented:  /test/re/re.alg
not implemented:  /test/re/re.alg/re.alg.match
not implemented:  /test/re/re.alg/re.alg.replace
not implemented:  /test/re/re.alg/re.alg.search
not implemented:  /test/re/re.alg/re.except
not implemented:  /test/re/re.badexp
not implemented:  /test/re/re.const
not implemented:  /test/re/re.const/re.err
not implemented:  /test/re/re.const/re.matchflag
not implemented:  /test/re/re.const/re.synopt
not implemented:  /test/re/re.def
not implemented:  /test/re/re.def/defns.regex.collating.element
not implemented:  /test/re/re.def/defns.regex.finite.state.machine
not implemented:  /test/re/re.def/defns.regex.format.specifier
not implemented:  /test/re/re.def/defns.regex.matched
not implemented:  /test/re/re.def/defns.regex.primary.equivalence.class
not implemented:  /test/re/re.def/defns.regex.regular.expression
not implemented:  /test/re/re.def/defns.regex.subexpression
not implemented:  /test/re/re.general
not implemented:  /test/re/re.grammar
not implemented:  /test/re/re.iter
not implemented:  /test/re/re.iter/re.regiter
not implemented:  /test/re/re.iter/re.regiter/re.regiter.cnstr
not implemented:  /test/re/re.iter/re.regiter/re.regiter.comp
not implemented:  /test/re/re.iter/re.regiter/re.regiter.deref
not implemented:  /test/re/re.iter/re.regiter/re.regiter.incr
not implemented:  /test/re/re.iter/re.tokiter
not implemented:  /test/re/re.iter/re.tokiter/re.tokiter.cnstr
not implemented:  /test/re/re.iter/re.tokiter/re.tokiter.comp
not implemented:  /test/re/re.iter/re.tokiter/re.tokiter.deref
not implemented:  /test/re/re.iter/re.tokiter/re.tokiter.incr
not implemented:  /test/re/re.regex
not implemented:  /test/re/re.regex/re.regex.assign
not implemented:  /test/re/re.regex/re.regex.const
not implemented:  /test/re/re.regex/re.regex.construct
not implemented:  /test/re/re.regex/re.regex.locale
not implemented:  /test/re/re.regex/re.regex.nonmemb
not implemented:  /test/re/re.regex/re.regex.nonmemb/re.regex.nmswap
not implemented:  /test/re/re.regex/re.regex.operations
not implemented:  /test/re/re.regex/re.regex.swap
not implemented:  /test/re/re.req
not implemented:  /test/re/re.results
not implemented:  /test/re/re.results/re.results.acc
not implemented:  /test/re/re.results/re.results.all
not implemented:  /test/re/re.results/re.results.const
not implemented:  /test/re/re.results/re.results.form
not implemented:  /test/re/re.results/re.results.nonmember
not implemented:  /test/re/re.results/re.results.size
not implemented:  /test/re/re.results/re.results.swap
not implemented:  /test/re/re.submatch
not implemented:  /test/re/re.submatch/re.submatch.members
not implemented:  /test/re/re.submatch/re.submatch.op
not implemented:  /test/re/re.syn
not implemented:  /test/re/re.traits
passed 1 tests in /test/strings
passed 1 tests in /test/strings/basic.string
passed 4 tests in /test/strings/basic.string/string.access
passed 10 tests in /test/strings/basic.string/string.capacity
passed 16 tests in /test/strings/basic.string/string.cons
passed 8 tests in /test/strings/basic.string/string.iterators
passed 1 tests in /test/strings/basic.string/string.modifiers
passed 8 tests in /test/strings/basic.string/string.modifiers/string::append
passed 8 tests in /test/strings/basic.string/string.modifiers/string::assign
passed 1 tests in /test/strings/basic.string/string.modifiers/string::copy
passed 4 tests in /test/strings/basic.string/string.modifiers/string::erase
passed 9 tests in /test/strings/basic.string/string.modifiers/string::insert
passed 4 tests in /test/strings/basic.string/string.modifiers/string::op+=
passed 11 tests in /test/strings/basic.string/string.modifiers/string::replace
passed 1 tests in /test/strings/basic.string/string.modifiers/string::swap
passed 1 tests in /test/strings/basic.string/string.nonmembers
passed 6 tests in /test/strings/basic.string/string.nonmembers/string.io
passed 1 tests in /test/strings/basic.string/string.nonmembers/string.special
passed 3 tests in /test/strings/basic.string/string.nonmembers/string::op!=
passed 5 tests in /test/strings/basic.string/string.nonmembers/string::op+
passed 3 tests in /test/strings/basic.string/string.nonmembers/string::operator==
passed 3 tests in /test/strings/basic.string/string.nonmembers/string::opgt
passed 3 tests in /test/strings/basic.string/string.nonmembers/string::opgt=
passed 3 tests in /test/strings/basic.string/string.nonmembers/string::oplt
passed 3 tests in /test/strings/basic.string/string.nonmembers/string::oplt=
passed 1 tests in /test/strings/basic.string/string.ops
passed 3 tests in /test/strings/basic.string/string.ops/string.accessors
passed 6 tests in /test/strings/basic.string/string.ops/string::compare
passed 4 tests in /test/strings/basic.string/string.ops/string::find
passed 4 tests in /test/strings/basic.string/string.ops/string::find.first.not.of
passed 4 tests in /test/strings/basic.string/string.ops/string::find.first.of
passed 4 tests in /test/strings/basic.string/string.ops/string::find.last.not.of
passed 4 tests in /test/strings/basic.string/string.ops/string::find.last.of
passed 4 tests in /test/strings/basic.string/string.ops/string::rfind
passed 1 tests in /test/strings/basic.string/string.ops/string::substr
passed 1 tests in /test/strings/basic.string/string.require
passed 1 tests in /test/strings/basic.string.hash
cuchar.pass.cpp:26:10: fatal error: 'cuchar' file not found
#include <cuchar>
         ^
1 error generated.
cuchar.pass.cpp failed to compile
version_cuchar.pass.cpp:26:10: fatal error: 'cuchar' file not found
#include <cuchar>
         ^
1 error generated.
version_cuchar.pass.cpp failed to compile
failed 2 tests in /test/strings/c.strings
passed 8 tests in /test/strings/c.strings
passed 1 tests in /test/strings/char.traits
passed 1 tests in /test/strings/char.traits/char.traits.require
passed 1 tests in /test/strings/char.traits/char.traits.specializations
passed 15 tests in /test/strings/char.traits/char.traits.specializations/char.traits.specializations.char
passed 15 tests in /test/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t
passed 15 tests in /test/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t
passed 15 tests in /test/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t
passed 1 tests in /test/strings/char.traits/char.traits.typedefs
passed 1 tests in /test/strings/string.classes
not implemented:  /test/strings/string.conversions
not implemented:  /test/strings/strings.general
passed 1 tests in /test/thread
passed 1 tests in /test/thread/futures
not implemented:  /test/thread/futures/futures.async
not implemented:  /test/thread/futures/futures.atomic_future
not implemented:  /test/thread/futures/futures.errors
not implemented:  /test/thread/futures/futures.future_error
passed 3 tests in /test/thread/futures/futures.overview
not implemented:  /test/thread/futures/futures.promise
not implemented:  /test/thread/futures/futures.shared_future
not implemented:  /test/thread/futures/futures.state
not implemented:  /test/thread/futures/futures.tas
not implemented:  /test/thread/futures/futures.tas/futures.taask.nonmembers
not implemented:  /test/thread/futures/futures.tas/futures.task.members
not implemented:  /test/thread/futures/futures.unique_future
notify_all_at_thread_exit.pass.cpp:34:2: error: #error notify_all_at_thread_exit not implemented
#error notify_all_at_thread_exit not implemented
 ^
1 error generated.
notify_all_at_thread_exit.pass.cpp failed to compile
failed 1 tests in /test/thread/thread.condition
passed 2 tests in /test/thread/thread.condition
passed 13 tests in /test/thread/thread.condition/thread.condition.condvar
passed 12 tests in /test/thread/thread.condition/thread.condition.condvarany
passed 1 tests in /test/thread/thread.general
passed 1 tests in /test/thread/thread.mutex
passed 1 tests in /test/thread/thread.mutex/thread.lock
passed 6 tests in /test/thread/thread.mutex/thread.lock/thread.lock.guard
passed 1 tests in /test/thread/thread.mutex/thread.lock/thread.lock.unique
passed 11 tests in /test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons
passed 5 tests in /test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking
passed 3 tests in /test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod
passed 3 tests in /test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs
passed 2 tests in /test/thread/thread.mutex/thread.lock.algorithm
passed 1 tests in /test/thread/thread.mutex/thread.mutex.requirements
passed 6 tests in /test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.class
passed 6 tests in /test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.recursive
passed 1 tests in /test/thread/thread.mutex/thread.once
passed 1 tests in /test/thread/thread.mutex/thread.once/thread.once.callonce
passed 3 tests in /test/thread/thread.mutex/thread.once/thread.once.onceflag
passed 1 tests in /test/thread/thread.mutex/thread.timedmutex.requirements
passed 7 tests in /test/thread/thread.mutex/thread.timedmutex.requirements/thread.timedmutex.class
passed 7 tests in /test/thread/thread.mutex/thread.timedmutex.requirements/thread.timedmutex.recursive
passed 1 tests in /test/thread/thread.req
passed 1 tests in /test/thread/thread.req/thread.req.exception
passed 1 tests in /test/thread/thread.req/thread.req.native
passed 1 tests in /test/thread/thread.req/thread.req.paramname
passed 1 tests in /test/thread/thread.req/thread.req.timing
passed 1 tests in /test/thread/thread.threads
passed 1 tests in /test/thread/thread.threads/thread.thread.class
passed 1 tests in /test/thread/thread.threads/thread.thread.class/thread.thread.algorithm
passed 2 tests in /test/thread/thread.threads/thread.thread.class/thread.thread.assign
passed 4 tests in /test/thread/thread.threads/thread.thread.class/thread.thread.constr
passed 1 tests in /test/thread/thread.threads/thread.thread.class/thread.thread.destr
passed 7 tests in /test/thread/thread.threads/thread.thread.class/thread.thread.id
passed 6 tests in /test/thread/thread.threads/thread.thread.class/thread.thread.member
passed 1 tests in /test/thread/thread.threads/thread.thread.class/thread.thread.static
passed 4 tests in /test/thread/thread.threads/thread.thread.this
passed 1 tests in /test/utilities
passed 1 tests in /test/utilities/date.time
passed 1 tests in /test/utilities/function.objects
passed 6 tests in /test/utilities/function.objects/arithmetic.operations
passed 1 tests in /test/utilities/function.objects/base
passed 1 tests in /test/utilities/function.objects/bind
passed 1 tests in /test/utilities/function.objects/bind/func.bind
invoke_int_0.pass.cpp:58:15: error: no member named 'bind' in namespace 'std'
    test(std::bind(f), 1);
         ~~~~~^
invoke_int_0.pass.cpp:59:15: error: no member named 'bind' in namespace 'std'
    test(std::bind(&f), 1);
         ~~~~~^
invoke_int_0.pass.cpp:60:15: error: no member named 'bind' in namespace 'std'
    test(std::bind(A_int_0()), 4);
         ~~~~~^
invoke_int_0.pass.cpp:61:21: error: no member named 'bind' in namespace 'std'
    test_const(std::bind(A_int_0()), 5);
               ~~~~~^
invoke_int_0.pass.cpp:63:15: error: no member named 'bind' in namespace 'std'
    test(std::bind<int>(f), 1);
         ~~~~~^
invoke_int_0.pass.cpp:64:15: error: no member named 'bind' in namespace 'std'
    test(std::bind<int>(&f), 1);
         ~~~~~^
invoke_int_0.pass.cpp:65:15: error: no member named 'bind' in namespace 'std'
    test(std::bind<int>(A_int_0()), 4);
         ~~~~~^
invoke_int_0.pass.cpp:66:21: error: no member named 'bind' in namespace 'std'
    test_const(std::bind<int>(A_int_0()), 5);
               ~~~~~^
8 errors generated.
invoke_int_0.pass.cpp failed to compile
invoke_lvalue.pass.cpp:64:10: error: no member named 'bind' in namespace 'std'
    std::bind(f_void_1, _1)(i);
    ~~~~~^
invoke_lvalue.pass.cpp:70:10: error: no member named 'bind' in namespace 'std'
    std::bind(f_void_1, i)();
    ~~~~~^
invoke_lvalue.pass.cpp:78:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, _1)(i);
    ~~~~~^
invoke_lvalue.pass.cpp:85:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, i)();
    ~~~~~^
invoke_lvalue.pass.cpp:93:10: error: no member named 'bind' in namespace 'std'
    std::bind(a0, _1)(i);
    ~~~~~^
invoke_lvalue.pass.cpp:100:10: error: no member named 'bind' in namespace 'std'
    std::bind(a0, i)();
    ~~~~~^
invoke_lvalue.pass.cpp:108:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, _1)(a);
    ~~~~~^
invoke_lvalue.pass.cpp:112:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, _1)(ap);
    ~~~~~^
invoke_lvalue.pass.cpp:119:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, a)();
    ~~~~~^
invoke_lvalue.pass.cpp:123:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, ap)();
    ~~~~~^
invoke_lvalue.pass.cpp:131:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, _1)(a);
    ~~~~~^
invoke_lvalue.pass.cpp:135:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, _1)(ap);
    ~~~~~^
invoke_lvalue.pass.cpp:142:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, a)();
    ~~~~~^
invoke_lvalue.pass.cpp:146:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, ap)();
    ~~~~~^
invoke_lvalue.pass.cpp:179:5: error: no member named 'bind' in namespace 'std'
    assert(std::bind(f_int_1, _1)(i) == 3);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
invoke_lvalue.pass.cpp:179:17: note: instantiated from:
    assert(std::bind(f_int_1, _1)(i) == 3);
           ~~~~~^
invoke_lvalue.pass.cpp:180:5: error: no member named 'bind' in namespace 'std'
    assert(std::bind(f_int_1, i)() == 3);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
invoke_lvalue.pass.cpp:180:17: note: instantiated from:
    assert(std::bind(f_int_1, i)() == 3);
           ~~~~~^
invoke_lvalue.pass.cpp:186:5: error: no member named 'bind' in namespace 'std'
    assert(std::bind(fp, _1)(i) == 4);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
invoke_lvalue.pass.cpp:186:17: note: instantiated from:
    assert(std::bind(fp, _1)(i) == 4);
           ~~~~~^
invoke_lvalue.pass.cpp:187:5: error: no member named 'bind' in namespace 'std'
    assert(std::bind(fp, i)() == 4);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
invoke_lvalue.pass.cpp:187:17: note: instantiated from:
    assert(std::bind(fp, i)() == 4);
           ~~~~~^
invoke_lvalue.pass.cpp:192:5: error: no member named 'bind' in namespace 'std'
    assert(std::bind(A_int_1(), _1)(i) == 3);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
invoke_lvalue.pass.cpp:192:17: note: instantiated from:
    assert(std::bind(A_int_1(), _1)(i) == 3);
           ~~~~~^
fatal error: too many errors emitted, stopping now
20 errors generated.
invoke_lvalue.pass.cpp failed to compile
invoke_rvalue.pass.cpp:63:10: error: no member named 'bind' in namespace 'std'
    std::bind(f_void_1, _1)(2);
    ~~~~~^
invoke_rvalue.pass.cpp:68:10: error: no member named 'bind' in namespace 'std'
    std::bind(f_void_1, 2)();
    ~~~~~^
invoke_rvalue.pass.cpp:75:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, _1)(3);
    ~~~~~^
invoke_rvalue.pass.cpp:81:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, 3)();
    ~~~~~^
invoke_rvalue.pass.cpp:88:10: error: no member named 'bind' in namespace 'std'
    std::bind(a0, _1)(4);
    ~~~~~^
invoke_rvalue.pass.cpp:94:10: error: no member named 'bind' in namespace 'std'
    std::bind(a0, 4)();
    ~~~~~^
invoke_rvalue.pass.cpp:101:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, _1)(A_void_1());
    ~~~~~^
invoke_rvalue.pass.cpp:105:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, _1)(&a);
    ~~~~~^
invoke_rvalue.pass.cpp:111:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, A_void_1())();
    ~~~~~^
invoke_rvalue.pass.cpp:115:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, &a)();
    ~~~~~^
invoke_rvalue.pass.cpp:122:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, _1)(A_void_1());
    ~~~~~^
invoke_rvalue.pass.cpp:126:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, _1)(&a);
    ~~~~~^
invoke_rvalue.pass.cpp:132:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, A_void_1())();
    ~~~~~^
invoke_rvalue.pass.cpp:136:10: error: no member named 'bind' in namespace 'std'
    std::bind(fp, &a)();
    ~~~~~^
invoke_rvalue.pass.cpp:168:5: error: no member named 'bind' in namespace 'std'
    assert(std::bind(f_int_1, _1)(2) == 3);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
invoke_rvalue.pass.cpp:168:17: note: instantiated from:
    assert(std::bind(f_int_1, _1)(2) == 3);
           ~~~~~^
invoke_rvalue.pass.cpp:169:5: error: no member named 'bind' in namespace 'std'
    assert(std::bind(f_int_1, 2)() == 3);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
invoke_rvalue.pass.cpp:169:17: note: instantiated from:
    assert(std::bind(f_int_1, 2)() == 3);
           ~~~~~^
invoke_rvalue.pass.cpp:174:5: error: no member named 'bind' in namespace 'std'
    assert(std::bind(fp, _1)(3) == 4);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
invoke_rvalue.pass.cpp:174:17: note: instantiated from:
    assert(std::bind(fp, _1)(3) == 4);
           ~~~~~^
invoke_rvalue.pass.cpp:175:5: error: no member named 'bind' in namespace 'std'
    assert(std::bind(fp, 3)() == 4);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
invoke_rvalue.pass.cpp:175:17: note: instantiated from:
    assert(std::bind(fp, 3)() == 4);
           ~~~~~^
invoke_rvalue.pass.cpp:179:5: error: no member named 'bind' in namespace 'std'
    assert(std::bind(A_int_1(), _1)(4) == 3);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
invoke_rvalue.pass.cpp:179:17: note: instantiated from:
    assert(std::bind(A_int_1(), _1)(4) == 3);
           ~~~~~^
fatal error: too many errors emitted, stopping now
20 errors generated.
invoke_rvalue.pass.cpp failed to compile
invoke_void_0.pass.cpp:64:15: error: no member named 'bind' in namespace 'std'
    test(std::bind(f));
         ~~~~~^
invoke_void_0.pass.cpp:65:15: error: no member named 'bind' in namespace 'std'
    test(std::bind(&f));
         ~~~~~^
invoke_void_0.pass.cpp:66:15: error: no member named 'bind' in namespace 'std'
    test(std::bind(A_int_0()));
         ~~~~~^
invoke_void_0.pass.cpp:67:21: error: no member named 'bind' in namespace 'std'
    test_const(std::bind(A_int_0()));
               ~~~~~^
invoke_void_0.pass.cpp:69:15: error: no member named 'bind' in namespace 'std'
    test(std::bind<void>(f));
         ~~~~~^
invoke_void_0.pass.cpp:70:15: error: no member named 'bind' in namespace 'std'
    test(std::bind<void>(&f));
         ~~~~~^
invoke_void_0.pass.cpp:71:15: error: no member named 'bind' in namespace 'std'
    test(std::bind<void>(A_int_0()));
         ~~~~~^
invoke_void_0.pass.cpp:72:21: error: no member named 'bind' in namespace 'std'
    test_const(std::bind<void>(A_int_0()));
               ~~~~~^
8 errors generated.
invoke_void_0.pass.cpp failed to compile
failed 4 tests in /test/utilities/function.objects/bind/func.bind/func.bind.bind
is_bind_expression.pass.cpp:41:21: error: no member named 'bind' in namespace 'std'
    test<true>(std::bind(C()));
               ~~~~~^
is_bind_expression.pass.cpp:42:21: error: no member named 'bind' in namespace 'std'
    test<true>(std::bind(C(), std::placeholders::_2));
               ~~~~~^
is_bind_expression.pass.cpp:43:21: error: no member named 'bind' in namespace 'std'
    test<true>(std::bind<int>(C()));
               ~~~~~^
3 errors generated.
is_bind_expression.pass.cpp failed to compile
failed 1 tests in /test/utilities/function.objects/bind/func.bind/func.bind.isbind
passed 1 tests in /test/utilities/function.objects/bind/func.bind/func.bind.isbind
passed 1 tests in /test/utilities/function.objects/bind/func.bind/func.bind.place
passed 3 tests in /test/utilities/function.objects/bitwise.operations
passed 6 tests in /test/utilities/function.objects/comparisons
passed 1 tests in /test/utilities/function.objects/func.def
member_function.pass.cpp:45:5: warning: comparison between pointer and integer ('__apply_cv<A, char ()>::type *' and 'int')
    assert(f(a) == 'a');
    ^~~~~~~~~~~~~~~~~~~
member_function.pass.cpp:45:17: note: instantiated from:
    assert(f(a) == 'a');
           ~~~~ ^  ~~~
member_function.pass.cpp:77:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
member_function.pass.cpp:47:5: warning: comparison between pointer and integer ('__apply_cv<A, char ()>::type *' and 'int')
    assert(f(ap) == 'a');
    ^~~~~~~~~~~~~~~~~~~~
member_function.pass.cpp:47:18: note: instantiated from:
    assert(f(ap) == 'a');
           ~~~~~ ^  ~~~
In file included from member_function.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:60:22: error: non-const lvalue reference to type '__apply_cv<A, char ()>::type' (aka 'char ()') cannot bind to a temporary of type 'enable_if<is_base_of<A, remove_reference<A>::type>::value, char>::type' (aka 'char')
              return __invoke(__f_, __a0);
                     ^~~~~~~~~~~~~~~~~~~~
member_function.pass.cpp:45:5: note: in instantiation of function template specialization 'std::__mem_fn<char (A::*)()>::operator()<A>' requested here
    assert(f(a) == 'a');
    ^
member_function.pass.cpp:45:12: note: instantiated from:
    assert(f(a) == 'a');
           ^
member_function.pass.cpp:77:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
In file included from member_function.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:60:22: error: non-const lvalue reference to type '__apply_cv<A, char ()>::type' (aka 'char ()') cannot bind to a temporary of type 'enable_if<!is_base_of<A, remove_reference<A *>::type>::value, char>::type' (aka 'char')
              return __invoke(__f_, __a0);
                     ^~~~~~~~~~~~~~~~~~~~
member_function.pass.cpp:47:5: note: in instantiation of function template specialization 'std::__mem_fn<char (A::*)()>::operator()<A *>' requested here
    assert(f(ap) == 'a');
    ^
member_function.pass.cpp:47:12: note: instantiated from:
    assert(f(ap) == 'a');
           ^
member_function.pass.cpp:77:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
member_function.pass.cpp:57:5: error: no matching function for call to object of type 'std::__mem_fn<char (A::*)(int)>'
    assert(f(a, 1) == 'b');
    ^~~~~~~~~~~~~~~~~~~~~~
member_function.pass.cpp:57:12: note: instantiated from:
    assert(f(a, 1) == 'b');
           ^
member_function.pass.cpp:78:5: note: in instantiation of function template specialization 'test1<std::__mem_fn<char (A::*)(int)> >' requested here
    test1(std::mem_fn(&A::test1));
    ^
In file included from member_function.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:65:11: note: candidate function [with $0 = A, $1 = int] not viable: no known conversion from 'int' to 'int &' for 2nd argument
          operator() (_A0& __a0, _A1& __a1)
          ^
../../../../include/__functional_03:51:8: note: candidate function not viable: requires 0 arguments, but 2 were provided
       operator() ()
       ^
In file included from member_function.pass.cpp:29:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:1012:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_Tp>(), _STD::declval<_A0>(),
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:1012:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_Tp>(), _STD::declval<_A0>(),
                     ^~~~~~~~
In file included from member_function.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:71:8: note: in instantiation of template class 'std::__invoke_return2<char (A::*)(int, double), A, int, int>' requested here
       typename __invoke_return2<type, _A0, _A1, _A2>::type
       ^
../../../../include/__functional_03:72:11: note: while substituting deduced template arguments into function template 'operator()' [with $0 = A, $1 = int, $2 = int]
          operator() (_A0& __a0, _A1& __a1, _A2& __a2)
          ^
member_function.pass.cpp:79:5: note: in instantiation of function template specialization 'test2<std::__mem_fn<char (A::*)(int, double)> >' requested here
    test2(std::mem_fn(&A::test2));
    ^
In file included from member_function.pass.cpp:29:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
member_function.pass.cpp:69:5: error: no matching function for call to object of type 'std::__mem_fn<char (A::*)(int, double)>'
    assert(f(a, 1, 2) == 'c');
    ^~~~~~~~~~~~~~~~~~~~~~~~~
member_function.pass.cpp:69:12: note: instantiated from:
    assert(f(a, 1, 2) == 'c');
           ^
member_function.pass.cpp:79:5: note: in instantiation of function template specialization 'test2<std::__mem_fn<char (A::*)(int, double)> >' requested here
    test2(std::mem_fn(&A::test2));
    ^
In file included from member_function.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:51:8: note: candidate function not viable: requires 0 arguments, but 3 were provided
       operator() ()
       ^
2 warnings and 5 errors generated.
member_function.pass.cpp failed to compile
In file included from member_function_const.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:123:12: error: functional-style cast from 'char (A::*)() const' to '__mem_fn<char (A::*)()>' is not allowed
    return __mem_fn<_R (_T::*)()>(__pm);
           ^~~~~~~~~~~~~~~~~~~~~~~
member_function_const.pass.cpp:83:11: note: in instantiation of function template specialization 'std::mem_fn<char, A>' requested here
    test0(std::mem_fn(&A::test0));
          ^
member_function_const.pass.cpp:45:5: warning: comparison between pointer and integer ('__apply_cv<A, char ()>::type *' and 'int')
    assert(f(a) == 'a');
    ^~~~~~~~~~~~~~~~~~~
member_function_const.pass.cpp:45:17: note: instantiated from:
    assert(f(a) == 'a');
           ~~~~ ^  ~~~
member_function_const.pass.cpp:83:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
member_function_const.pass.cpp:47:5: warning: comparison between pointer and integer ('__apply_cv<A, char ()>::type *' and 'int')
    assert(f(ap) == 'a');
    ^~~~~~~~~~~~~~~~~~~~
member_function_const.pass.cpp:47:18: note: instantiated from:
    assert(f(ap) == 'a');
           ~~~~~ ^  ~~~
member_function_const.pass.cpp:49:5: warning: comparison between pointer and integer ('__apply_cv<A const, char ()>::type *' and 'int')
    assert(f(cap) == 'a');
    ^~~~~~~~~~~~~~~~~~~~~
member_function_const.pass.cpp:49:19: note: instantiated from:
    assert(f(cap) == 'a');
           ~~~~~~ ^  ~~~
In file included from member_function_const.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:60:22: error: non-const lvalue reference to type '__apply_cv<A, char ()>::type' (aka 'char ()') cannot bind to a temporary of type 'enable_if<is_base_of<A, remove_reference<A>::type>::value, char>::type' (aka 'char')
              return __invoke(__f_, __a0);
                     ^~~~~~~~~~~~~~~~~~~~
member_function_const.pass.cpp:45:5: note: in instantiation of function template specialization 'std::__mem_fn<char (A::*)()>::operator()<A>' requested here
    assert(f(a) == 'a');
    ^
member_function_const.pass.cpp:45:12: note: instantiated from:
    assert(f(a) == 'a');
           ^
member_function_const.pass.cpp:83:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
In file included from member_function_const.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:60:22: error: non-const lvalue reference to type '__apply_cv<A, char ()>::type' (aka 'char ()') cannot bind to a temporary of type 'enable_if<!is_base_of<A, remove_reference<A *>::type>::value, char>::type' (aka 'char')
              return __invoke(__f_, __a0);
                     ^~~~~~~~~~~~~~~~~~~~
member_function_const.pass.cpp:47:5: note: in instantiation of function template specialization 'std::__mem_fn<char (A::*)()>::operator()<A *>' requested here
    assert(f(ap) == 'a');
    ^
member_function_const.pass.cpp:47:12: note: instantiated from:
    assert(f(ap) == 'a');
           ^
member_function_const.pass.cpp:83:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
In file included from member_function_const.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:60:22: error: non-const lvalue reference to type '__apply_cv<A const, char ()>::type' (aka 'char ()') cannot bind to a temporary of type 'enable_if<!is_base_of<A, remove_reference<A const *>::type>::value, char>::type' (aka 'char')
              return __invoke(__f_, __a0);
                     ^~~~~~~~~~~~~~~~~~~~
member_function_const.pass.cpp:49:5: note: in instantiation of function template specialization 'std::__mem_fn<char (A::*)()>::operator()<A const *>' requested here
    assert(f(cap) == 'a');
    ^
member_function_const.pass.cpp:49:12: note: instantiated from:
    assert(f(cap) == 'a');
           ^
member_function_const.pass.cpp:83:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
In file included from member_function_const.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:131:12: error: functional-style cast from 'char (A::*)(int) const' to '__mem_fn<char (A::*)(int)>' is not allowed
    return __mem_fn<_R (_T::*)(_A0)>(__pm);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~
member_function_const.pass.cpp:84:11: note: in instantiation of function template specialization 'std::mem_fn<char, A, int>' requested here
    test1(std::mem_fn(&A::test1));
          ^
member_function_const.pass.cpp:59:5: error: no matching function for call to object of type 'std::__mem_fn<char (A::*)(int)>'
    assert(f(a, 1) == 'b');
    ^~~~~~~~~~~~~~~~~~~~~~
member_function_const.pass.cpp:59:12: note: instantiated from:
    assert(f(a, 1) == 'b');
           ^
member_function_const.pass.cpp:84:5: note: in instantiation of function template specialization 'test1<std::__mem_fn<char (A::*)(int)> >' requested here
    test1(std::mem_fn(&A::test1));
    ^
In file included from member_function_const.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:65:11: note: candidate function [with $0 = A, $1 = int] not viable: no known conversion from 'int' to 'int &' for 2nd argument
          operator() (_A0& __a0, _A1& __a1)
          ^
../../../../include/__functional_03:51:8: note: candidate function not viable: requires 0 arguments, but 2 were provided
       operator() ()
       ^
../../../../include/__functional_03:139:12: error: functional-style cast from 'char (A::*)(int, double) const' to '__mem_fn<char (A::*)(int, double)>' is not allowed
    return __mem_fn<_R (_T::*)(_A0, _A1)>(__pm);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
member_function_const.pass.cpp:85:11: note: in instantiation of function template specialization 'std::mem_fn<char, A, int, double>' requested here
    test2(std::mem_fn(&A::test2));
          ^
In file included from member_function_const.pass.cpp:29:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:1012:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_Tp>(), _STD::declval<_A0>(),
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:1012:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_Tp>(), _STD::declval<_A0>(),
                     ^~~~~~~~
In file included from member_function_const.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:71:8: note: in instantiation of template class 'std::__invoke_return2<char (A::*)(int, double), A, int, int>' requested here
       typename __invoke_return2<type, _A0, _A1, _A2>::type
       ^
../../../../include/__functional_03:72:11: note: while substituting deduced template arguments into function template 'operator()' [with $0 = A, $1 = int, $2 = int]
          operator() (_A0& __a0, _A1& __a1, _A2& __a2)
          ^
member_function_const.pass.cpp:85:5: note: in instantiation of function template specialization 'test2<std::__mem_fn<char (A::*)(int, double)> >' requested here
    test2(std::mem_fn(&A::test2));
    ^
In file included from member_function_const.pass.cpp:29:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
member_function_const.pass.cpp:73:5: error: no matching function for call to object of type 'std::__mem_fn<char (A::*)(int, double)>'
    assert(f(a, 1, 2) == 'c');
    ^~~~~~~~~~~~~~~~~~~~~~~~~
member_function_const.pass.cpp:73:12: note: instantiated from:
    assert(f(a, 1, 2) == 'c');
           ^
member_function_const.pass.cpp:85:5: note: in instantiation of function template specialization 'test2<std::__mem_fn<char (A::*)(int, double)> >' requested here
    test2(std::mem_fn(&A::test2));
    ^
In file included from member_function_const.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:51:8: note: candidate function not viable: requires 0 arguments, but 3 were provided
       operator() ()
       ^
3 warnings and 9 errors generated.
member_function_const.pass.cpp failed to compile
In file included from member_function_const_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:187:12: error: functional-style cast from 'char (A::*)() const volatile' to '__mem_fn<char (A::*)()>' is not allowed
    return __mem_fn<_R (_T::*)()>(__pm);
           ^~~~~~~~~~~~~~~~~~~~~~~
member_function_const_volatile.pass.cpp:83:11: note: in instantiation of function template specialization 'std::mem_fn<char, A>' requested here
    test0(std::mem_fn(&A::test0));
          ^
member_function_const_volatile.pass.cpp:45:5: warning: comparison between pointer and integer ('__apply_cv<A, char ()>::type *' and 'int')
    assert(f(a) == 'a');
    ^~~~~~~~~~~~~~~~~~~
member_function_const_volatile.pass.cpp:45:17: note: instantiated from:
    assert(f(a) == 'a');
           ~~~~ ^  ~~~
member_function_const_volatile.pass.cpp:83:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
member_function_const_volatile.pass.cpp:47:5: warning: comparison between pointer and integer ('__apply_cv<A, char ()>::type *' and 'int')
    assert(f(ap) == 'a');
    ^~~~~~~~~~~~~~~~~~~~
member_function_const_volatile.pass.cpp:47:18: note: instantiated from:
    assert(f(ap) == 'a');
           ~~~~~ ^  ~~~
member_function_const_volatile.pass.cpp:49:5: warning: comparison between pointer and integer ('__apply_cv<A const volatile, char ()>::type *' and 'int')
    assert(f(cap) == 'a');
    ^~~~~~~~~~~~~~~~~~~~~
member_function_const_volatile.pass.cpp:49:19: note: instantiated from:
    assert(f(cap) == 'a');
           ~~~~~~ ^  ~~~
In file included from member_function_const_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:60:22: error: non-const lvalue reference to type '__apply_cv<A, char ()>::type' (aka 'char ()') cannot bind to a temporary of type 'enable_if<is_base_of<A, remove_reference<A>::type>::value, char>::type' (aka 'char')
              return __invoke(__f_, __a0);
                     ^~~~~~~~~~~~~~~~~~~~
member_function_const_volatile.pass.cpp:45:5: note: in instantiation of function template specialization 'std::__mem_fn<char (A::*)()>::operator()<A>' requested here
    assert(f(a) == 'a');
    ^
member_function_const_volatile.pass.cpp:45:12: note: instantiated from:
    assert(f(a) == 'a');
           ^
member_function_const_volatile.pass.cpp:83:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
In file included from member_function_const_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:60:22: error: non-const lvalue reference to type '__apply_cv<A, char ()>::type' (aka 'char ()') cannot bind to a temporary of type 'enable_if<!is_base_of<A, remove_reference<A *>::type>::value, char>::type' (aka 'char')
              return __invoke(__f_, __a0);
                     ^~~~~~~~~~~~~~~~~~~~
member_function_const_volatile.pass.cpp:47:5: note: in instantiation of function template specialization 'std::__mem_fn<char (A::*)()>::operator()<A *>' requested here
    assert(f(ap) == 'a');
    ^
member_function_const_volatile.pass.cpp:47:12: note: instantiated from:
    assert(f(ap) == 'a');
           ^
member_function_const_volatile.pass.cpp:83:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
In file included from member_function_const_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:60:22: error: non-const lvalue reference to type '__apply_cv<A const volatile, char ()>::type' (aka 'char ()') cannot bind to a temporary of type 'enable_if<!is_base_of<A, remove_reference<A const volatile *>::type>::value, char>::type' (aka 'char')
              return __invoke(__f_, __a0);
                     ^~~~~~~~~~~~~~~~~~~~
member_function_const_volatile.pass.cpp:49:5: note: in instantiation of function template specialization 'std::__mem_fn<char (A::*)()>::operator()<A const volatile *>' requested here
    assert(f(cap) == 'a');
    ^
member_function_const_volatile.pass.cpp:49:12: note: instantiated from:
    assert(f(cap) == 'a');
           ^
member_function_const_volatile.pass.cpp:83:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
In file included from member_function_const_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:195:12: error: functional-style cast from 'char (A::*)(int) const volatile' to '__mem_fn<char (A::*)(int)>' is not allowed
    return __mem_fn<_R (_T::*)(_A0)>(__pm);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~
member_function_const_volatile.pass.cpp:84:11: note: in instantiation of function template specialization 'std::mem_fn<char, A, int>' requested here
    test1(std::mem_fn(&A::test1));
          ^
member_function_const_volatile.pass.cpp:59:5: error: no matching function for call to object of type 'std::__mem_fn<char (A::*)(int)>'
    assert(f(a, 1) == 'b');
    ^~~~~~~~~~~~~~~~~~~~~~
member_function_const_volatile.pass.cpp:59:12: note: instantiated from:
    assert(f(a, 1) == 'b');
           ^
member_function_const_volatile.pass.cpp:84:5: note: in instantiation of function template specialization 'test1<std::__mem_fn<char (A::*)(int)> >' requested here
    test1(std::mem_fn(&A::test1));
    ^
In file included from member_function_const_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:65:11: note: candidate function [with $0 = A, $1 = int] not viable: no known conversion from 'int' to 'int &' for 2nd argument
          operator() (_A0& __a0, _A1& __a1)
          ^
../../../../include/__functional_03:51:8: note: candidate function not viable: requires 0 arguments, but 2 were provided
       operator() ()
       ^
../../../../include/__functional_03:203:12: error: functional-style cast from 'char (A::*)(int, double) const volatile' to '__mem_fn<char (A::*)(int, double)>' is not allowed
    return __mem_fn<_R (_T::*)(_A0, _A1)>(__pm);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
member_function_const_volatile.pass.cpp:85:11: note: in instantiation of function template specialization 'std::mem_fn<char, A, int, double>' requested here
    test2(std::mem_fn(&A::test2));
          ^
In file included from member_function_const_volatile.pass.cpp:29:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:1012:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_Tp>(), _STD::declval<_A0>(),
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:1012:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_Tp>(), _STD::declval<_A0>(),
                     ^~~~~~~~
In file included from member_function_const_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:71:8: note: in instantiation of template class 'std::__invoke_return2<char (A::*)(int, double), A, int, int>' requested here
       typename __invoke_return2<type, _A0, _A1, _A2>::type
       ^
../../../../include/__functional_03:72:11: note: while substituting deduced template arguments into function template 'operator()' [with $0 = A, $1 = int, $2 = int]
          operator() (_A0& __a0, _A1& __a1, _A2& __a2)
          ^
member_function_const_volatile.pass.cpp:85:5: note: in instantiation of function template specialization 'test2<std::__mem_fn<char (A::*)(int, double)> >' requested here
    test2(std::mem_fn(&A::test2));
    ^
In file included from member_function_const_volatile.pass.cpp:29:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
member_function_const_volatile.pass.cpp:73:5: error: no matching function for call to object of type 'std::__mem_fn<char (A::*)(int, double)>'
    assert(f(a, 1, 2) == 'c');
    ^~~~~~~~~~~~~~~~~~~~~~~~~
member_function_const_volatile.pass.cpp:73:12: note: instantiated from:
    assert(f(a, 1, 2) == 'c');
           ^
member_function_const_volatile.pass.cpp:85:5: note: in instantiation of function template specialization 'test2<std::__mem_fn<char (A::*)(int, double)> >' requested here
    test2(std::mem_fn(&A::test2));
    ^
In file included from member_function_const_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:51:8: note: candidate function not viable: requires 0 arguments, but 3 were provided
       operator() ()
       ^
3 warnings and 9 errors generated.
member_function_const_volatile.pass.cpp failed to compile
In file included from member_function_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:155:12: error: functional-style cast from 'char (A::*)() volatile' to '__mem_fn<char (A::*)()>' is not allowed
    return __mem_fn<_R (_T::*)()>(__pm);
           ^~~~~~~~~~~~~~~~~~~~~~~
member_function_volatile.pass.cpp:83:11: note: in instantiation of function template specialization 'std::mem_fn<char, A>' requested here
    test0(std::mem_fn(&A::test0));
          ^
member_function_volatile.pass.cpp:45:5: warning: comparison between pointer and integer ('__apply_cv<A, char ()>::type *' and 'int')
    assert(f(a) == 'a');
    ^~~~~~~~~~~~~~~~~~~
member_function_volatile.pass.cpp:45:17: note: instantiated from:
    assert(f(a) == 'a');
           ~~~~ ^  ~~~
member_function_volatile.pass.cpp:83:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
member_function_volatile.pass.cpp:47:5: warning: comparison between pointer and integer ('__apply_cv<A, char ()>::type *' and 'int')
    assert(f(ap) == 'a');
    ^~~~~~~~~~~~~~~~~~~~
member_function_volatile.pass.cpp:47:18: note: instantiated from:
    assert(f(ap) == 'a');
           ~~~~~ ^  ~~~
member_function_volatile.pass.cpp:49:5: warning: comparison between pointer and integer ('__apply_cv<A volatile, char ()>::type *' and 'int')
    assert(f(cap) == 'a');
    ^~~~~~~~~~~~~~~~~~~~~
member_function_volatile.pass.cpp:49:19: note: instantiated from:
    assert(f(cap) == 'a');
           ~~~~~~ ^  ~~~
In file included from member_function_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:60:22: error: non-const lvalue reference to type '__apply_cv<A, char ()>::type' (aka 'char ()') cannot bind to a temporary of type 'enable_if<is_base_of<A, remove_reference<A>::type>::value, char>::type' (aka 'char')
              return __invoke(__f_, __a0);
                     ^~~~~~~~~~~~~~~~~~~~
member_function_volatile.pass.cpp:45:5: note: in instantiation of function template specialization 'std::__mem_fn<char (A::*)()>::operator()<A>' requested here
    assert(f(a) == 'a');
    ^
member_function_volatile.pass.cpp:45:12: note: instantiated from:
    assert(f(a) == 'a');
           ^
member_function_volatile.pass.cpp:83:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
In file included from member_function_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:60:22: error: non-const lvalue reference to type '__apply_cv<A, char ()>::type' (aka 'char ()') cannot bind to a temporary of type 'enable_if<!is_base_of<A, remove_reference<A *>::type>::value, char>::type' (aka 'char')
              return __invoke(__f_, __a0);
                     ^~~~~~~~~~~~~~~~~~~~
member_function_volatile.pass.cpp:47:5: note: in instantiation of function template specialization 'std::__mem_fn<char (A::*)()>::operator()<A *>' requested here
    assert(f(ap) == 'a');
    ^
member_function_volatile.pass.cpp:47:12: note: instantiated from:
    assert(f(ap) == 'a');
           ^
member_function_volatile.pass.cpp:83:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
In file included from member_function_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:60:22: error: non-const lvalue reference to type '__apply_cv<A volatile, char ()>::type' (aka 'char ()') cannot bind to a temporary of type 'enable_if<!is_base_of<A, remove_reference<A volatile *>::type>::value, char>::type' (aka 'char')
              return __invoke(__f_, __a0);
                     ^~~~~~~~~~~~~~~~~~~~
member_function_volatile.pass.cpp:49:5: note: in instantiation of function template specialization 'std::__mem_fn<char (A::*)()>::operator()<A volatile *>' requested here
    assert(f(cap) == 'a');
    ^
member_function_volatile.pass.cpp:49:12: note: instantiated from:
    assert(f(cap) == 'a');
           ^
member_function_volatile.pass.cpp:83:5: note: in instantiation of function template specialization 'test0<std::__mem_fn<char (A::*)()> >' requested here
    test0(std::mem_fn(&A::test0));
    ^
In file included from member_function_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:163:12: error: functional-style cast from 'char (A::*)(int) volatile' to '__mem_fn<char (A::*)(int)>' is not allowed
    return __mem_fn<_R (_T::*)(_A0)>(__pm);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~
member_function_volatile.pass.cpp:84:11: note: in instantiation of function template specialization 'std::mem_fn<char, A, int>' requested here
    test1(std::mem_fn(&A::test1));
          ^
member_function_volatile.pass.cpp:59:5: error: no matching function for call to object of type 'std::__mem_fn<char (A::*)(int)>'
    assert(f(a, 1) == 'b');
    ^~~~~~~~~~~~~~~~~~~~~~
member_function_volatile.pass.cpp:59:12: note: instantiated from:
    assert(f(a, 1) == 'b');
           ^
member_function_volatile.pass.cpp:84:5: note: in instantiation of function template specialization 'test1<std::__mem_fn<char (A::*)(int)> >' requested here
    test1(std::mem_fn(&A::test1));
    ^
In file included from member_function_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:65:11: note: candidate function [with $0 = A, $1 = int] not viable: no known conversion from 'int' to 'int &' for 2nd argument
          operator() (_A0& __a0, _A1& __a1)
          ^
../../../../include/__functional_03:51:8: note: candidate function not viable: requires 0 arguments, but 2 were provided
       operator() ()
       ^
../../../../include/__functional_03:171:12: error: functional-style cast from 'char (A::*)(int, double) volatile' to '__mem_fn<char (A::*)(int, double)>' is not allowed
    return __mem_fn<_R (_T::*)(_A0, _A1)>(__pm);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
member_function_volatile.pass.cpp:85:11: note: in instantiation of function template specialization 'std::mem_fn<char, A, int, double>' requested here
    test2(std::mem_fn(&A::test2));
          ^
In file included from member_function_volatile.pass.cpp:29:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:1012:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_Tp>(), _STD::declval<_A0>(),
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:1012:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_Tp>(), _STD::declval<_A0>(),
                     ^~~~~~~~
In file included from member_function_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:71:8: note: in instantiation of template class 'std::__invoke_return2<char (A::*)(int, double), A, int, int>' requested here
       typename __invoke_return2<type, _A0, _A1, _A2>::type
       ^
../../../../include/__functional_03:72:11: note: while substituting deduced template arguments into function template 'operator()' [with $0 = A, $1 = int, $2 = int]
          operator() (_A0& __a0, _A1& __a1, _A2& __a2)
          ^
member_function_volatile.pass.cpp:85:5: note: in instantiation of function template specialization 'test2<std::__mem_fn<char (A::*)(int, double)> >' requested here
    test2(std::mem_fn(&A::test2));
    ^
In file included from member_function_volatile.pass.cpp:29:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
member_function_volatile.pass.cpp:73:5: error: no matching function for call to object of type 'std::__mem_fn<char (A::*)(int, double)>'
    assert(f(a, 1, 2) == 'c');
    ^~~~~~~~~~~~~~~~~~~~~~~~~
member_function_volatile.pass.cpp:73:12: note: instantiated from:
    assert(f(a, 1, 2) == 'c');
           ^
member_function_volatile.pass.cpp:85:5: note: in instantiation of function template specialization 'test2<std::__mem_fn<char (A::*)(int, double)> >' requested here
    test2(std::mem_fn(&A::test2));
    ^
In file included from member_function_volatile.pass.cpp:29:
In file included from ../../../../include/functional:905:
../../../../include/__functional_03:51:8: note: candidate function not viable: requires 0 arguments, but 3 were provided
       operator() ()
       ^
3 warnings and 9 errors generated.
member_function_volatile.pass.cpp failed to compile
failed 4 tests in /test/utilities/function.objects/func.memfn
passed 2 tests in /test/utilities/function.objects/func.memfn
passed 2 tests in /test/utilities/function.objects/func.require
passed 1 tests in /test/utilities/function.objects/func.wrap
passed 1 tests in /test/utilities/function.objects/func.wrap/func.wrap.badcall
passed 1 tests in /test/utilities/function.objects/func.wrap/func.wrap.badcall/func.wrap.badcall.const
passed 1 tests in /test/utilities/function.objects/func.wrap/func.wrap.func
passed 1 tests in /test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.alg
passed 1 tests in /test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.cap
alloc.pass.cpp:35:2: error: #error template<class A> function(allocator_arg_t, const A&); not implemented
#error template<class A> function(allocator_arg_t, const A&); not implemented
 ^
1 error generated.
alloc.pass.cpp failed to compile
alloc_F.pass.cpp:35:2: error: #error template<class F, class A> function(allocator_arg_t, const A&, F); not implemented
#error template<class F, class A> function(allocator_arg_t, const A&, F); not implemented
 ^
1 error generated.
alloc_F.pass.cpp failed to compile
alloc_function.pass.cpp:35:2: error: #error template<class A> function(allocator_arg_t, const A&, const function&); not implemented
#error template<class A> function(allocator_arg_t, const A&, const function&); not implemented
 ^
1 error generated.
alloc_function.pass.cpp failed to compile
alloc_nullptr.pass.cpp:35:2: error: #error template<class A> function(allocator_arg_t, const A&, nullptr_t); not implemented
#error template<class A> function(allocator_arg_t, const A&, nullptr_t); not implemented
 ^
1 error generated.
alloc_nullptr.pass.cpp failed to compile
alloc_rfunction.pass.cpp:35:2: error: #error template<class A> function(allocator_arg_t, const A&, function&&); not implemented
#error template<class A> function(allocator_arg_t, const A&, function&&); not implemented
 ^
1 error generated.
alloc_rfunction.pass.cpp failed to compile
failed 5 tests in /test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con
passed 7 tests in /test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con
In file included from invoke_int_0.pass.cpp:30:
In file included from ../../../../../../include/functional:905:
../../../../../../include/__functional_03:377:12: error: no matching function for call to '__invoke'
    return __invoke<_R>(__f_.first());
           ^~~~~~~~~~~~
../../../../../../include/__functional_03:327:14: note: in instantiation of member function 'std::__function::__func<A_int_0, std::allocator<A_int_0>, int ()>::operator()' requested here
    explicit __func(_F __f, _Alloc __a) : __f_(_STD::move(__f), _STD::move(__a)) {}
             ^
In file included from invoke_int_0.pass.cpp:30:
In file included from ../../../../../../include/functional:510:
In file included from ../../../../../../include/memory:217:
In file included from ../../../../../../include/__functional_base:71:
../../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from invoke_int_0.pass.cpp:30:
In file included from ../../../../../../include/functional:905:
../../../../../../include/__functional_03:377:12: error: no matching function for call to '__invoke'
    return __invoke<_R>(__f_.first());
           ^~~~~~~~~~~~
../../../../../../include/__functional_03:327:14: note: in instantiation of member function 'std::__function::__func<int (*)(), std::allocator<int (*)()>, int ()>::operator()' requested here
    explicit __func(_F __f, _Alloc __a) : __f_(_STD::move(__f), _STD::move(__a)) {}
             ^
In file included from invoke_int_0.pass.cpp:30:
In file included from ../../../../../../include/functional:510:
In file included from ../../../../../../include/memory:217:
In file included from ../../../../../../include/__functional_base:71:
../../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
2 errors generated.
invoke_int_0.pass.cpp failed to compile
In file included from invoke_void_0.pass.cpp:30:
In file included from ../../../../../../include/functional:905:
../../../../../../include/__functional_03:377:12: error: no matching function for call to '__invoke'
    return __invoke<_R>(__f_.first());
           ^~~~~~~~~~~~
../../../../../../include/__functional_03:327:14: note: in instantiation of member function 'std::__function::__func<A_void_0, std::allocator<A_void_0>, void ()>::operator()' requested here
    explicit __func(_F __f, _Alloc __a) : __f_(_STD::move(__f), _STD::move(__a)) {}
             ^
In file included from invoke_void_0.pass.cpp:30:
In file included from ../../../../../../include/functional:510:
In file included from ../../../../../../include/memory:217:
In file included from ../../../../../../include/__functional_base:71:
../../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from invoke_void_0.pass.cpp:30:
In file included from ../../../../../../include/functional:905:
../../../../../../include/__functional_03:377:12: error: no matching function for call to '__invoke'
    return __invoke<_R>(__f_.first());
           ^~~~~~~~~~~~
../../../../../../include/__functional_03:327:14: note: in instantiation of member function 'std::__function::__func<void (*)(), std::allocator<void (*)()>, void ()>::operator()' requested here
    explicit __func(_F __f, _Alloc __a) : __f_(_STD::move(__f), _STD::move(__a)) {}
             ^
In file included from invoke_void_0.pass.cpp:30:
In file included from ../../../../../../include/functional:510:
In file included from ../../../../../../include/memory:217:
In file included from ../../../../../../include/__functional_base:71:
../../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
2 errors generated.
invoke_void_0.pass.cpp failed to compile
failed 2 tests in /test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv
passed 2 tests in /test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv
assign_F_alloc.pass.cpp:35:2: error: #error template<class F, class A> void assign(F&&, const A&); not implemented
#error template<class F, class A> void assign(F&&, const A&); not implemented
 ^
1 error generated.
assign_F_alloc.pass.cpp failed to compile
failed 1 tests in /test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod
passed 1 tests in /test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod
passed 1 tests in /test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.nullptr
passed 2 tests in /test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ
passed 4 tests in /test/utilities/function.objects/function.pointer.adaptors
passed 3 tests in /test/utilities/function.objects/logical.operations
passed 16 tests in /test/utilities/function.objects/member.pointer.adaptors
passed 4 tests in /test/utilities/function.objects/negators
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:1327:13: error: type 'functor4' does not provide a call operator
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1327:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<functor4 (), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<functor4 ()>' requested here
typename result_of<_F()>::type
^
../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = functor4]
__invoke(_F __f)
^
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<functor4 &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:660:44: note: in instantiation of template class 'std::reference_wrapper<functor4>' requested here
    static const size_t __complete_check = sizeof(_Dp);
                                           ^
../../../../include/type_traits:674:38: note: in instantiation of template class 'std::__is_base_of_imp<std::binary_function<char, int, double>, std::reference_wrapper<functor4> >' requested here
    : public integral_constant<bool, __is_base_of_imp<_Bp, _Dp>::value> {};
                                     ^
../../../../include/type_traits:678:7: note: in instantiation of template class 'std::__libcpp_base_of<std::binary_function<char, int, double>, std::reference_wrapper<functor4>, 1, 1, 0>' requested here
    : public __libcpp_base_of<typename remove_cv<_Bp>::type, typename remove_cv<_Dp>::type>
      ^
binary.pass.cpp:72:5: note: in instantiation of template class 'std::is_base_of<std::binary_function<char, int, double>, std::reference_wrapper<functor4> >' requested here
    static_assert((std::is_base_of<std::binary_function<char, int, double>,
    ^
binary.pass.cpp:72:20: note: instantiated from:
    static_assert((std::is_base_of<std::binary_function<char, int, double>,
                   ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<functor4 &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:660:44: note: in instantiation of template class 'std::reference_wrapper<functor4>' requested here
    static const size_t __complete_check = sizeof(_Dp);
                                           ^
../../../../include/type_traits:674:38: note: in instantiation of template class 'std::__is_base_of_imp<std::binary_function<char, int, double>, std::reference_wrapper<functor4> >' requested here
    : public integral_constant<bool, __is_base_of_imp<_Bp, _Dp>::value> {};
                                     ^
../../../../include/type_traits:678:7: note: in instantiation of template class 'std::__libcpp_base_of<std::binary_function<char, int, double>, std::reference_wrapper<functor4>, 1, 1, 0>' requested here
    : public __libcpp_base_of<typename remove_cv<_Bp>::type, typename remove_cv<_Dp>::type>
      ^
binary.pass.cpp:72:5: note: in instantiation of template class 'std::is_base_of<std::binary_function<char, int, double>, std::reference_wrapper<functor4> >' requested here
    static_assert((std::is_base_of<std::binary_function<char, int, double>,
    ^
binary.pass.cpp:72:20: note: instantiated from:
    static_assert((std::is_base_of<std::binary_function<char, int, double>,
                   ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:1327:13: error: too few arguments to function call, expected 1, have 0
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1327:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<float (*())(int), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<float (*())(int)>' requested here
typename result_of<_F()>::type
^
../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = float (*)(int)]
__invoke(_F __f)
^
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<float (*&)(int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:660:44: note: in instantiation of template class 'std::reference_wrapper<float (*)(int)>' requested here
    static const size_t __complete_check = sizeof(_Dp);
                                           ^
../../../../include/type_traits:674:38: note: in instantiation of template class 'std::__is_base_of_imp<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int)> >' requested here
    : public integral_constant<bool, __is_base_of_imp<_Bp, _Dp>::value> {};
                                     ^
../../../../include/type_traits:678:7: note: in instantiation of template class 'std::__libcpp_base_of<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int)>, 1, 1, 0>' requested here
    : public __libcpp_base_of<typename remove_cv<_Bp>::type, typename remove_cv<_Dp>::type>
      ^
binary.pass.cpp:84:5: note: in instantiation of template class 'std::is_base_of<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int)> >' requested here
    static_assert((!std::is_base_of<std::binary_function<int, int, float>,
    ^
binary.pass.cpp:84:21: note: instantiated from:
    static_assert((!std::is_base_of<std::binary_function<int, int, float>,
                    ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<float (*&)(int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:660:44: note: in instantiation of template class 'std::reference_wrapper<float (*)(int)>' requested here
    static const size_t __complete_check = sizeof(_Dp);
                                           ^
../../../../include/type_traits:674:38: note: in instantiation of template class 'std::__is_base_of_imp<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int)> >' requested here
    : public integral_constant<bool, __is_base_of_imp<_Bp, _Dp>::value> {};
                                     ^
../../../../include/type_traits:678:7: note: in instantiation of template class 'std::__libcpp_base_of<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int)>, 1, 1, 0>' requested here
    : public __libcpp_base_of<typename remove_cv<_Bp>::type, typename remove_cv<_Dp>::type>
      ^
binary.pass.cpp:84:5: note: in instantiation of template class 'std::is_base_of<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int)> >' requested here
    static_assert((!std::is_base_of<std::binary_function<int, int, float>,
    ^
binary.pass.cpp:84:21: note: instantiated from:
    static_assert((!std::is_base_of<std::binary_function<int, int, float>,
                    ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:1327:13: error: too few arguments to function call, expected 2, have 0
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1327:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<float (*())(int, int), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<float (*())(int, int)>' requested here
typename result_of<_F()>::type
^
../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = float (*)(int, int)]
__invoke(_F __f)
^
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<float (*&)(int, int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:660:44: note: in instantiation of template class 'std::reference_wrapper<float (*)(int, int)>' requested here
    static const size_t __complete_check = sizeof(_Dp);
                                           ^
../../../../include/type_traits:674:38: note: in instantiation of template class 'std::__is_base_of_imp<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int, int)> >' requested here
    : public integral_constant<bool, __is_base_of_imp<_Bp, _Dp>::value> {};
                                     ^
../../../../include/type_traits:678:7: note: in instantiation of template class 'std::__libcpp_base_of<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int, int)>, 1, 1, 0>' requested here
    : public __libcpp_base_of<typename remove_cv<_Bp>::type, typename remove_cv<_Dp>::type>
      ^
binary.pass.cpp:86:5: note: in instantiation of template class 'std::is_base_of<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int, int)> >' requested here
    static_assert((std::is_base_of<std::binary_function<int, int, float>,
    ^
binary.pass.cpp:86:20: note: instantiated from:
    static_assert((std::is_base_of<std::binary_function<int, int, float>,
                   ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<float (*&)(int, int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:660:44: note: in instantiation of template class 'std::reference_wrapper<float (*)(int, int)>' requested here
    static const size_t __complete_check = sizeof(_Dp);
                                           ^
../../../../include/type_traits:674:38: note: in instantiation of template class 'std::__is_base_of_imp<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int, int)> >' requested here
    : public integral_constant<bool, __is_base_of_imp<_Bp, _Dp>::value> {};
                                     ^
../../../../include/type_traits:678:7: note: in instantiation of template class 'std::__libcpp_base_of<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int, int)>, 1, 1, 0>' requested here
    : public __libcpp_base_of<typename remove_cv<_Bp>::type, typename remove_cv<_Dp>::type>
      ^
binary.pass.cpp:86:5: note: in instantiation of template class 'std::is_base_of<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int, int)> >' requested here
    static_assert((std::is_base_of<std::binary_function<int, int, float>,
    ^
binary.pass.cpp:86:20: note: instantiated from:
    static_assert((std::is_base_of<std::binary_function<int, int, float>,
                   ^
In file included from binary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
6 errors generated.
binary.pass.cpp failed to compile
In file included from type.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:1327:13: error: type 'C' does not provide a call operator
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1327:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<C (), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from type.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<C ()>' requested here
typename result_of<_F()>::type
^
../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = C]
__invoke(_F __f)
^
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<C &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
type.pass.cpp:37:5: note: in instantiation of template class 'std::reference_wrapper<C>' requested here
    static_assert((std::is_same<std::reference_wrapper<C>::type,
    ^
type.pass.cpp:37:33: note: instantiated from:
    static_assert((std::is_same<std::reference_wrapper<C>::type,
                                ^
In file included from type.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<C &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
type.pass.cpp:37:5: note: in instantiation of template class 'std::reference_wrapper<C>' requested here
    static_assert((std::is_same<std::reference_wrapper<C>::type,
    ^
type.pass.cpp:37:33: note: instantiated from:
    static_assert((std::is_same<std::reference_wrapper<C>::type,
                                ^
In file included from type.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from type.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:1327:13: error: too few arguments to function call, expected 1, have 0
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1327:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<int *(*())(double *), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from type.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<int *(*())(double *)>' requested here
typename result_of<_F()>::type
^
../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = int *(*)(double *)]
__invoke(_F __f)
^
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int *(*&)(double *), 0>' requested here
    typename __invoke_return<type&>::type
    ^
type.pass.cpp:45:5: note: in instantiation of template class 'std::reference_wrapper<int *(*)(double *)>' requested here
    static_assert((std::is_same<std::reference_wrapper<int*(*)(double*)>::type,
    ^
type.pass.cpp:45:33: note: instantiated from:
    static_assert((std::is_same<std::reference_wrapper<int*(*)(double*)>::type,
                                ^
In file included from type.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int *(*&)(double *), 0>' requested here
    typename __invoke_return<type&>::type
    ^
type.pass.cpp:45:5: note: in instantiation of template class 'std::reference_wrapper<int *(*)(double *)>' requested here
    static_assert((std::is_same<std::reference_wrapper<int*(*)(double*)>::type,
    ^
type.pass.cpp:45:33: note: instantiated from:
    static_assert((std::is_same<std::reference_wrapper<int*(*)(double*)>::type,
                                ^
In file included from type.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
4 errors generated.
type.pass.cpp failed to compile
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:1327:13: error: type 'functor4' does not provide a call operator
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1327:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<functor4 (), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<functor4 ()>' requested here
typename result_of<_F()>::type
^
../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = functor4]
__invoke(_F __f)
^
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<functor4 &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:660:44: note: in instantiation of template class 'std::reference_wrapper<functor4>' requested here
    static const size_t __complete_check = sizeof(_Dp);
                                           ^
../../../../include/type_traits:674:38: note: in instantiation of template class 'std::__is_base_of_imp<std::unary_function<int, int>, std::reference_wrapper<functor4> >' requested here
    : public integral_constant<bool, __is_base_of_imp<_Bp, _Dp>::value> {};
                                     ^
../../../../include/type_traits:678:7: note: in instantiation of template class 'std::__libcpp_base_of<std::unary_function<int, int>, std::reference_wrapper<functor4>, 1, 1, 0>' requested here
    : public __libcpp_base_of<typename remove_cv<_Bp>::type, typename remove_cv<_Dp>::type>
      ^
unary.pass.cpp:72:5: note: in instantiation of template class 'std::is_base_of<std::unary_function<int, int>, std::reference_wrapper<functor4> >' requested here
    static_assert((std::is_base_of<std::unary_function<int, int>,
    ^
unary.pass.cpp:72:20: note: instantiated from:
    static_assert((std::is_base_of<std::unary_function<int, int>,
                   ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<functor4 &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:660:44: note: in instantiation of template class 'std::reference_wrapper<functor4>' requested here
    static const size_t __complete_check = sizeof(_Dp);
                                           ^
../../../../include/type_traits:674:38: note: in instantiation of template class 'std::__is_base_of_imp<std::unary_function<int, int>, std::reference_wrapper<functor4> >' requested here
    : public integral_constant<bool, __is_base_of_imp<_Bp, _Dp>::value> {};
                                     ^
../../../../include/type_traits:678:7: note: in instantiation of template class 'std::__libcpp_base_of<std::unary_function<int, int>, std::reference_wrapper<functor4>, 1, 1, 0>' requested here
    : public __libcpp_base_of<typename remove_cv<_Bp>::type, typename remove_cv<_Dp>::type>
      ^
unary.pass.cpp:72:5: note: in instantiation of template class 'std::is_base_of<std::unary_function<int, int>, std::reference_wrapper<functor4> >' requested here
    static_assert((std::is_base_of<std::unary_function<int, int>,
    ^
unary.pass.cpp:72:20: note: instantiated from:
    static_assert((std::is_base_of<std::unary_function<int, int>,
                   ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:1327:13: error: too few arguments to function call, expected 1, have 0
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1327:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<float (*())(int), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<float (*())(int)>' requested here
typename result_of<_F()>::type
^
../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = float (*)(int)]
__invoke(_F __f)
^
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<float (*&)(int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:660:44: note: in instantiation of template class 'std::reference_wrapper<float (*)(int)>' requested here
    static const size_t __complete_check = sizeof(_Dp);
                                           ^
../../../../include/type_traits:674:38: note: in instantiation of template class 'std::__is_base_of_imp<std::unary_function<int, float>, std::reference_wrapper<float (*)(int)> >' requested here
    : public integral_constant<bool, __is_base_of_imp<_Bp, _Dp>::value> {};
                                     ^
../../../../include/type_traits:678:7: note: in instantiation of template class 'std::__libcpp_base_of<std::unary_function<int, float>, std::reference_wrapper<float (*)(int)>, 1, 1, 0>' requested here
    : public __libcpp_base_of<typename remove_cv<_Bp>::type, typename remove_cv<_Dp>::type>
      ^
unary.pass.cpp:82:5: note: in instantiation of template class 'std::is_base_of<std::unary_function<int, float>, std::reference_wrapper<float (*)(int)> >' requested here
    static_assert((std::is_base_of<std::unary_function<int, float>,
    ^
unary.pass.cpp:82:20: note: instantiated from:
    static_assert((std::is_base_of<std::unary_function<int, float>,
                   ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<float (*&)(int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:660:44: note: in instantiation of template class 'std::reference_wrapper<float (*)(int)>' requested here
    static const size_t __complete_check = sizeof(_Dp);
                                           ^
../../../../include/type_traits:674:38: note: in instantiation of template class 'std::__is_base_of_imp<std::unary_function<int, float>, std::reference_wrapper<float (*)(int)> >' requested here
    : public integral_constant<bool, __is_base_of_imp<_Bp, _Dp>::value> {};
                                     ^
../../../../include/type_traits:678:7: note: in instantiation of template class 'std::__libcpp_base_of<std::unary_function<int, float>, std::reference_wrapper<float (*)(int)>, 1, 1, 0>' requested here
    : public __libcpp_base_of<typename remove_cv<_Bp>::type, typename remove_cv<_Dp>::type>
      ^
unary.pass.cpp:82:5: note: in instantiation of template class 'std::is_base_of<std::unary_function<int, float>, std::reference_wrapper<float (*)(int)> >' requested here
    static_assert((std::is_base_of<std::unary_function<int, float>,
    ^
unary.pass.cpp:82:20: note: instantiated from:
    static_assert((std::is_base_of<std::unary_function<int, float>,
                   ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:1327:13: error: too few arguments to function call, expected 2, have 0
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1327:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<float (*())(int, int), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<float (*())(int, int)>' requested here
typename result_of<_F()>::type
^
../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = float (*)(int, int)]
__invoke(_F __f)
^
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<float (*&)(int, int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:660:44: note: in instantiation of template class 'std::reference_wrapper<float (*)(int, int)>' requested here
    static const size_t __complete_check = sizeof(_Dp);
                                           ^
../../../../include/type_traits:674:38: note: in instantiation of template class 'std::__is_base_of_imp<std::unary_function<int, float>, std::reference_wrapper<float (*)(int, int)> >' requested here
    : public integral_constant<bool, __is_base_of_imp<_Bp, _Dp>::value> {};
                                     ^
../../../../include/type_traits:678:7: note: in instantiation of template class 'std::__libcpp_base_of<std::unary_function<int, float>, std::reference_wrapper<float (*)(int, int)>, 1, 1, 0>' requested here
    : public __libcpp_base_of<typename remove_cv<_Bp>::type, typename remove_cv<_Dp>::type>
      ^
unary.pass.cpp:84:5: note: in instantiation of template class 'std::is_base_of<std::unary_function<int, float>, std::reference_wrapper<float (*)(int, int)> >' requested here
    static_assert((!std::is_base_of<std::unary_function<int, float>,
    ^
unary.pass.cpp:84:21: note: instantiated from:
    static_assert((!std::is_base_of<std::unary_function<int, float>,
                    ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<float (*&)(int, int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:660:44: note: in instantiation of template class 'std::reference_wrapper<float (*)(int, int)>' requested here
    static const size_t __complete_check = sizeof(_Dp);
                                           ^
../../../../include/type_traits:674:38: note: in instantiation of template class 'std::__is_base_of_imp<std::unary_function<int, float>, std::reference_wrapper<float (*)(int, int)> >' requested here
    : public integral_constant<bool, __is_base_of_imp<_Bp, _Dp>::value> {};
                                     ^
../../../../include/type_traits:678:7: note: in instantiation of template class 'std::__libcpp_base_of<std::unary_function<int, float>, std::reference_wrapper<float (*)(int, int)>, 1, 1, 0>' requested here
    : public __libcpp_base_of<typename remove_cv<_Bp>::type, typename remove_cv<_Dp>::type>
      ^
unary.pass.cpp:84:5: note: in instantiation of template class 'std::is_base_of<std::unary_function<int, float>, std::reference_wrapper<float (*)(int, int)> >' requested here
    static_assert((!std::is_base_of<std::unary_function<int, float>,
    ^
unary.pass.cpp:84:21: note: instantiated from:
    static_assert((!std::is_base_of<std::unary_function<int, float>,
                    ^
In file included from unary.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
6 errors generated.
unary.pass.cpp failed to compile
In file included from weak_result.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:1327:13: error: too few arguments to function call, expected 1, have 0
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1327:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<int *(*())(double *), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from weak_result.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<int *(*())(double *)>' requested here
typename result_of<_F()>::type
^
../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = int *(*)(double *)]
__invoke(_F __f)
^
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int *(*&)(double *), 0>' requested here
    typename __invoke_return<type&>::type
    ^
weak_result.pass.cpp:85:5: note: in instantiation of template class 'std::reference_wrapper<int *(*)(double *)>' requested here
    static_assert((std::is_same<std::reference_wrapper<int*(*)(double*)>::result_type,
    ^
weak_result.pass.cpp:85:33: note: instantiated from:
    static_assert((std::is_same<std::reference_wrapper<int*(*)(double*)>::result_type,
                                ^
In file included from weak_result.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int *(*&)(double *), 0>' requested here
    typename __invoke_return<type&>::type
    ^
weak_result.pass.cpp:85:5: note: in instantiation of template class 'std::reference_wrapper<int *(*)(double *)>' requested here
    static_assert((std::is_same<std::reference_wrapper<int*(*)(double*)>::result_type,
    ^
weak_result.pass.cpp:85:33: note: instantiated from:
    static_assert((std::is_same<std::reference_wrapper<int*(*)(double*)>::result_type,
                                ^
In file included from weak_result.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from weak_result.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:1327:13: error: type 'functor4' does not provide a call operator
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1327:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<functor4 (), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from weak_result.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<functor4 ()>' requested here
typename result_of<_F()>::type
^
../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = functor4]
__invoke(_F __f)
^
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<functor4 &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
weak_result.pass.cpp:66:66: note: in instantiation of template class 'std::reference_wrapper<functor4>' requested here
    template <class U> static char test(typename U::result_type* = 0);
                                                                 ^
weak_result.pass.cpp:66:36: note: while substituting explicitly-specified template arguments into function template 'test' 
    template <class U> static char test(typename U::result_type* = 0);
                                   ^
weak_result.pass.cpp:94:5: note: in instantiation of template class 'has_result_type<std::reference_wrapper<functor4> >' requested here
    static_assert(!has_result_type<std::reference_wrapper<functor4> >::value, "");
    ^
weak_result.pass.cpp:94:20: note: instantiated from:
    static_assert(!has_result_type<std::reference_wrapper<functor4> >::value, "");
                   ^
In file included from weak_result.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<functor4 &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
weak_result.pass.cpp:66:66: note: in instantiation of template class 'std::reference_wrapper<functor4>' requested here
    template <class U> static char test(typename U::result_type* = 0);
                                                                 ^
weak_result.pass.cpp:66:36: note: while substituting explicitly-specified template arguments into function template 'test' 
    template <class U> static char test(typename U::result_type* = 0);
                                   ^
weak_result.pass.cpp:94:5: note: in instantiation of template class 'has_result_type<std::reference_wrapper<functor4> >' requested here
    static_assert(!has_result_type<std::reference_wrapper<functor4> >::value, "");
    ^
weak_result.pass.cpp:94:20: note: instantiated from:
    static_assert(!has_result_type<std::reference_wrapper<functor4> >::value, "");
                   ^
In file included from weak_result.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from weak_result.pass.cpp:30:
In file included from ../../../../include/functional:507:
../../../../include/type_traits:1327:13: error: type 'C' does not provide a call operator
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1327:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<C (), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from weak_result.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<C ()>' requested here
typename result_of<_F()>::type
^
../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = C]
__invoke(_F __f)
^
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<C &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
weak_result.pass.cpp:66:66: note: in instantiation of template class 'std::reference_wrapper<C>' requested here
    template <class U> static char test(typename U::result_type* = 0);
                                                                 ^
weak_result.pass.cpp:66:36: note: while substituting explicitly-specified template arguments into function template 'test' 
    template <class U> static char test(typename U::result_type* = 0);
                                   ^
weak_result.pass.cpp:95:5: note: in instantiation of template class 'has_result_type<std::reference_wrapper<C> >' requested here
    static_assert(!has_result_type<std::reference_wrapper<C> >::value, "");
    ^
weak_result.pass.cpp:95:20: note: instantiated from:
    static_assert(!has_result_type<std::reference_wrapper<C> >::value, "");
                   ^
In file included from weak_result.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<C &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
weak_result.pass.cpp:66:66: note: in instantiation of template class 'std::reference_wrapper<C>' requested here
    template <class U> static char test(typename U::result_type* = 0);
                                                                 ^
weak_result.pass.cpp:66:36: note: while substituting explicitly-specified template arguments into function template 'test' 
    template <class U> static char test(typename U::result_type* = 0);
                                   ^
weak_result.pass.cpp:95:5: note: in instantiation of template class 'has_result_type<std::reference_wrapper<C> >' requested here
    static_assert(!has_result_type<std::reference_wrapper<C> >::value, "");
    ^
weak_result.pass.cpp:95:20: note: instantiated from:
    static_assert(!has_result_type<std::reference_wrapper<C> >::value, "");
                   ^
In file included from weak_result.pass.cpp:30:
In file included from ../../../../include/functional:510:
In file included from ../../../../include/memory:217:
In file included from ../../../../include/__functional_base:71:
../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
6 errors generated.
weak_result.pass.cpp failed to compile
failed 4 tests in /test/utilities/function.objects/refwrap
In file included from conversion.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
conversion.pass.cpp:42:31: note: in instantiation of template class 'std::reference_wrapper<int>' requested here
    std::reference_wrapper<T> r(t);
                              ^
conversion.pass.cpp:57:5: note: in instantiation of function template specialization 'test<int>' requested here
    test(i);
    ^
In file included from conversion.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int const &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
conversion.pass.cpp:42:31: note: in instantiation of template class 'std::reference_wrapper<int const>' requested here
    std::reference_wrapper<T> r(t);
                              ^
conversion.pass.cpp:59:5: note: in instantiation of function template specialization 'test<int const>' requested here
    test(j);
    ^
In file included from conversion.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
2 errors generated.
conversion.pass.cpp failed to compile
failed 1 tests in /test/utilities/function.objects/refwrap/refwrap.access
In file included from copy_assign.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
copy_assign.pass.cpp:42:31: note: in instantiation of template class 'std::reference_wrapper<int>' requested here
    std::reference_wrapper<T> r(t);
                              ^
copy_assign.pass.cpp:69:5: note: in instantiation of function template specialization 'test<int>' requested here
    test(i);
    ^
In file included from copy_assign.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int const &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
copy_assign.pass.cpp:42:31: note: in instantiation of template class 'std::reference_wrapper<int const>' requested here
    std::reference_wrapper<T> r(t);
                              ^
copy_assign.pass.cpp:71:5: note: in instantiation of function template specialization 'test<int const>' requested here
    test(j);
    ^
In file included from copy_assign.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
2 errors generated.
copy_assign.pass.cpp failed to compile
failed 1 tests in /test/utilities/function.objects/refwrap/refwrap.assign
In file included from copy_ctor.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
copy_ctor.pass.cpp:42:31: note: in instantiation of template class 'std::reference_wrapper<int>' requested here
    std::reference_wrapper<T> r(t);
                              ^
copy_ctor.pass.cpp:57:5: note: in instantiation of function template specialization 'test<int>' requested here
    test(i);
    ^
In file included from copy_ctor.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int const &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
copy_ctor.pass.cpp:42:31: note: in instantiation of template class 'std::reference_wrapper<int const>' requested here
    std::reference_wrapper<T> r(t);
                              ^
copy_ctor.pass.cpp:59:5: note: in instantiation of function template specialization 'test<int const>' requested here
    test(j);
    ^
In file included from copy_ctor.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
2 errors generated.
copy_ctor.pass.cpp failed to compile
In file included from type_ctor.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
type_ctor.pass.cpp:42:31: note: in instantiation of template class 'std::reference_wrapper<int>' requested here
    std::reference_wrapper<T> r(t);
                              ^
type_ctor.pass.cpp:56:5: note: in instantiation of function template specialization 'test<int>' requested here
    test(i);
    ^
In file included from type_ctor.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int const &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
type_ctor.pass.cpp:42:31: note: in instantiation of template class 'std::reference_wrapper<int const>' requested here
    std::reference_wrapper<T> r(t);
                              ^
type_ctor.pass.cpp:58:5: note: in instantiation of function template specialization 'test<int const>' requested here
    test(j);
    ^
In file included from type_ctor.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
2 errors generated.
type_ctor.pass.cpp failed to compile
failed 2 tests in /test/utilities/function.objects/refwrap/refwrap.const
passed 1 tests in /test/utilities/function.objects/refwrap/refwrap.const
In file included from cref_1.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int const &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
cref_1.pass.cpp:36:43: note: in instantiation of template class 'std::reference_wrapper<int const>' requested here
    std::reference_wrapper<const int> r = std::cref(i);
                                          ^
In file included from cref_1.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
1 error generated.
cref_1.pass.cpp failed to compile
In file included from cref_2.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int const &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
cref_2.pass.cpp:36:44: note: in instantiation of template class 'std::reference_wrapper<int const>' requested here
    std::reference_wrapper<const int> r1 = std::cref(i);
                                           ^
In file included from cref_2.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
1 error generated.
cref_2.pass.cpp failed to compile
In file included from ref_1.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
ref_1.pass.cpp:36:37: note: in instantiation of template class 'std::reference_wrapper<int>' requested here
    std::reference_wrapper<int> r = std::ref(i);
                                    ^
In file included from ref_1.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
1 error generated.
ref_1.pass.cpp failed to compile
In file included from ref_2.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
ref_2.pass.cpp:36:38: note: in instantiation of template class 'std::reference_wrapper<int>' requested here
    std::reference_wrapper<int> r1 = std::ref(i);
                                     ^
In file included from ref_2.pass.cpp:30:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
1 error generated.
ref_2.pass.cpp failed to compile
failed 4 tests in /test/utilities/function.objects/refwrap/refwrap.helpers
passed 1 tests in /test/utilities/function.objects/refwrap/refwrap.helpers
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:507:
../../../../../include/type_traits:1327:13: error: too few arguments to function call, expected 1, have 0
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1327:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<void (*())(int), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<void (*())(int)>' requested here
typename result_of<_F()>::type
^
../../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = void (*)(int)]
__invoke(_F __f)
^
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<void (*&)(int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:71:43: note: in instantiation of template class 'std::reference_wrapper<void (*)(int)>' requested here
    std::reference_wrapper<void (*)(int)> r1(fp);
                                          ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<void (*&)(int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:71:43: note: in instantiation of template class 'std::reference_wrapper<void (*)(int)>' requested here
    std::reference_wrapper<void (*)(int)> r1(fp);
                                          ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:507:
../../../../../include/type_traits:1327:13: error: no matching function for call to object of type 'A_void_1'
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1327:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<A_void_1 (), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<A_void_1 ()>' requested here
typename result_of<_F()>::type
^
../../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = A_void_1]
__invoke(_F __f)
^
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<A_void_1 &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:80:38: note: in instantiation of template class 'std::reference_wrapper<A_void_1>' requested here
    std::reference_wrapper<A_void_1> r1(a0);
                                     ^
invoke.pass.cpp:47:10: note: candidate function not viable: requires 1 argument, but 0 were provided
    void operator()(int i)
         ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<A_void_1 &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:80:38: note: in instantiation of template class 'std::reference_wrapper<A_void_1>' requested here
    std::reference_wrapper<A_void_1> r1(a0);
                                     ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:507:
../../../../../include/type_traits:1327:13: error: too few arguments to function call, expected 1, have 0
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1327:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<int (*())(int), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<int (*())(int)>' requested here
typename result_of<_F()>::type
^
../../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = int (*)(int)]
__invoke(_F __f)
^
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int (*&)(int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:146:42: note: in instantiation of template class 'std::reference_wrapper<int (*)(int)>' requested here
    std::reference_wrapper<int (*)(int)> r1(fp);
                                         ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int (*&)(int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:146:42: note: in instantiation of template class 'std::reference_wrapper<int (*)(int)>' requested here
    std::reference_wrapper<int (*)(int)> r1(fp);
                                         ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:507:
../../../../../include/type_traits:1327:13: error: no matching function for call to object of type 'A_int_1'
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1327:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<A_int_1 (), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<A_int_1 ()>' requested here
typename result_of<_F()>::type
^
../../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = A_int_1]
__invoke(_F __f)
^
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<A_int_1 &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:153:37: note: in instantiation of template class 'std::reference_wrapper<A_int_1>' requested here
    std::reference_wrapper<A_int_1> r1(a0);
                                    ^
invoke.pass.cpp:124:9: note: candidate function not viable: requires 1 argument, but 0 were provided
    int operator()(int i)
        ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<A_int_1 &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:153:37: note: in instantiation of template class 'std::reference_wrapper<A_int_1>' requested here
    std::reference_wrapper<A_int_1> r1(a0);
                                    ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
invoke.pass.cpp:181:11: error: expression is not assignable
    r1(a) = 6;
    ~~~~~ ^
invoke.pass.cpp:185:12: error: expression is not assignable
    r1(ap) = 7;
    ~~~~~~ ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:507:
../../../../../include/type_traits:1327:13: error: too few arguments to function call, expected 2, have 0
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1327:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<void (*())(int, int), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<void (*())(int, int)>' requested here
typename result_of<_F()>::type
^
../../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = void (*)(int, int)]
__invoke(_F __f)
^
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<void (*&)(int, int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:224:48: note: in instantiation of template class 'std::reference_wrapper<void (*)(int, int)>' requested here
    std::reference_wrapper<void (*)(int, int)> r1(fp);
                                               ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<void (*&)(int, int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:224:48: note: in instantiation of template class 'std::reference_wrapper<void (*)(int, int)>' requested here
    std::reference_wrapper<void (*)(int, int)> r1(fp);
                                               ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:507:
../../../../../include/type_traits:1327:13: error: no matching function for call to object of type 'A_void_2'
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1327:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<A_void_2 (), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<A_void_2 ()>' requested here
typename result_of<_F()>::type
^
../../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = A_void_2]
__invoke(_F __f)
^
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<A_void_2 &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:234:38: note: in instantiation of template class 'std::reference_wrapper<A_void_2>' requested here
    std::reference_wrapper<A_void_2> r1(a0);
                                     ^
invoke.pass.cpp:199:10: note: candidate function not viable: requires 2 arguments, but 0 were provided
    void operator()(int i, int j)
         ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<A_void_2 &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:234:38: note: in instantiation of template class 'std::reference_wrapper<A_void_2>' requested here
    std::reference_wrapper<A_void_2> r1(a0);
                                     ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:507:
../../../../../include/type_traits:1327:13: error: too few arguments to function call, expected 2, have 0
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1327:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<int (*())(int, int), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<int (*())(int, int)>' requested here
typename result_of<_F()>::type
^
../../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = int (*)(int, int)]
__invoke(_F __f)
^
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int (*&)(int, int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:302:47: note: in instantiation of template class 'std::reference_wrapper<int (*)(int, int)>' requested here
    std::reference_wrapper<int (*)(int, int)> r1(fp);
                                              ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<int (*&)(int, int), 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:302:47: note: in instantiation of template class 'std::reference_wrapper<int (*)(int, int)>' requested here
    std::reference_wrapper<int (*)(int, int)> r1(fp);
                                              ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:507:
../../../../../include/type_traits:1327:13: error: no matching function for call to object of type 'A_int_2'
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1327:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../../include/type_traits:1353:7: note: in instantiation of template class 'std::__result_of<A_int_2 (), 1>' requested here
    : public __result_of<_Fn(),
      ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:895:1: note: in instantiation of template class 'std::result_of<A_int_2 ()>' requested here
typename result_of<_F()>::type
^
../../../../../include/__functional_base_03:896:1: note: while substituting deduced template arguments into function template '__invoke' [with _F = A_int_2]
__invoke(_F __f)
^
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<A_int_2 &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:310:37: note: in instantiation of template class 'std::reference_wrapper<A_int_2>' requested here
    std::reference_wrapper<A_int_2> r1(a0);
                                    ^
invoke.pass.cpp:280:9: note: candidate function not viable: requires 2 arguments, but 0 were provided
    int operator()(int i, int j)
        ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:981:13: error: no matching function for call to '__invoke'
    typedef decltype(__invoke(_STD::declval<_F>())) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/__functional_base_03:981:22: note: instantiated from:
    typedef decltype(__invoke(_STD::declval<_F>())) type;
                     ^~~~~~~~
../../../../../include/__functional_base_03:1037:5: note: in instantiation of template class 'std::__invoke_return<A_int_2 &, 0>' requested here
    typename __invoke_return<type&>::type
    ^
invoke.pass.cpp:310:37: note: in instantiation of template class 'std::reference_wrapper<A_int_2>' requested here
    std::reference_wrapper<A_int_2> r1(a0);
                                    ^
In file included from invoke.pass.cpp:33:
In file included from ../../../../../include/functional:510:
In file included from ../../../../../include/memory:217:
In file included from ../../../../../include/__functional_base:71:
../../../../../include/__functional_base_03:442:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1& __t1)
^
../../../../../include/__functional_base_03:454:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:466:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:478:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:490:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1& __t1)
^
../../../../../include/__functional_base_03:502:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:514:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:526:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:538:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:550:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:562:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:574:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:586:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1& __t1)
^
../../../../../include/__functional_base_03:598:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1& __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:610:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1& __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:622:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1& __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:636:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(), _T1 __t1)
^
../../../../../include/__functional_base_03:648:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0), _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:660:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1), _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:672:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2), _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:684:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const, _T1 __t1)
^
../../../../../include/__functional_base_03:696:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:708:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:720:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:732:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:744:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:756:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:768:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:780:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)() const volatile, _T1 __t1)
^
../../../../../include/__functional_base_03:792:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0) const volatile, _T1 __t1, _A0& __a0)
^
../../../../../include/__functional_base_03:804:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1) const volatile, _T1 __t1, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:816:1: note: candidate template ignored: failed template argument deduction
__invoke(_R (_T::*__f)(_A0, _A1, _A2) const volatile, _T1 __t1, _A0& __a0, _A1& __a1, _A2& __a2)
^
../../../../../include/__functional_base_03:830:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:838:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::*)
^
../../../../../include/__functional_base_03:874:1: note: candidate template ignored: failed template argument deduction
__invoke(_R _T::* __f, _T1& __t1)
^
../../../../../include/__functional_base_03:896:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f)
^
../../../../../include/__functional_base_03:904:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0)
^
../../../../../include/__functional_base_03:912:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1)
^
../../../../../include/__functional_base_03:920:1: note: candidate template ignored: failed template argument deduction
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
^
18 errors generated.
invoke.pass.cpp failed to compile
failed 1 tests in /test/utilities/function.objects/refwrap/refwrap.invoke
passed 3 tests in /test/utilities/function.objects/refwrap/refwrap.invoke
passed 3 tests in /test/utilities/function.objects/unord.hash
passed 1 tests in /test/utilities/memory
passed 1 tests in /test/utilities/memory/allocator.adaptor
passed 5 tests in /test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr
passed 9 tests in /test/utilities/memory/allocator.adaptor/allocator.adaptor.members
passed 4 tests in /test/utilities/memory/allocator.adaptor/allocator.adaptor.types
passed 1 tests in /test/utilities/memory/allocator.tag
passed 3 tests in /test/utilities/memory/allocator.traits
passed 7 tests in /test/utilities/memory/allocator.traits/allocator.traits.members
passed 10 tests in /test/utilities/memory/allocator.traits/allocator.traits.types
passed 1 tests in /test/utilities/memory/allocator.uses
passed 1 tests in /test/utilities/memory/allocator.uses/allocator.uses.construction
passed 1 tests in /test/utilities/memory/allocator.uses/allocator.uses.trait
passed 1 tests in /test/utilities/memory/c.malloc
passed 2 tests in /test/utilities/memory/default.allocator
passed 1 tests in /test/utilities/memory/default.allocator/allocator.globals
passed 4 tests in /test/utilities/memory/default.allocator/allocator.members
passed 5 tests in /test/utilities/memory/pointer.traits
passed 1 tests in /test/utilities/memory/pointer.traits/pointer.traits.functions
passed 3 tests in /test/utilities/memory/pointer.traits/pointer.traits.types
passed 1 tests in /test/utilities/memory/ptr.align
passed 1 tests in /test/utilities/memory/specialized.algorithms
passed 1 tests in /test/utilities/memory/specialized.algorithms/specialized.addressof
passed 2 tests in /test/utilities/memory/specialized.algorithms/uninitialized.copy
passed 1 tests in /test/utilities/memory/specialized.algorithms/uninitialized.fill
passed 1 tests in /test/utilities/memory/specialized.algorithms/uninitialized.fill.n
passed 1 tests in /test/utilities/memory/storage.iterator
passed 1 tests in /test/utilities/memory/temporary.buffer
passed 1 tests in /test/utilities/memory/unique.ptr
passed 1 tests in /test/utilities/memory/unique.ptr/unique.ptr.dltr
passed 3 tests in /test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt
passed 3 tests in /test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1
passed 1 tests in /test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.general
move01.pass.cpp:63:54: error: no viable constructor copying parameter of type 'Deleter<A []>'
    std::unique_ptr<A[], Deleter<A[]> > s1(new A[4], Deleter<A[]>(5));
                                                     ^~~~~~~~~~~~~~~
In file included from move01.pass.cpp:36:
./../deleter.h:105:5: note: candidate constructor not viable: no known conversion from 'Deleter<A []>' to 'Deleter<A []> &' for 1st argument
    Deleter(Deleter&);
    ^
1 error generated.
move01.pass.cpp failed to compile
failed 1 tests in /test/utilities/memory/unique.ptr/unique.ptr.runtime
passed 17 tests in /test/utilities/memory/unique.ptr/unique.ptr.runtime
pointer_deleter04.fail.cpp should not compile
move01.pass.cpp:76:53: error: no viable constructor copying parameter of type 'Deleter<A []>'
    std::unique_ptr<A[], Deleter<A[]> > s(new A[3], Deleter<A[]>(5));
                                                    ^~~~~~~~~~~~~~~
In file included from move01.pass.cpp:36:
./../../deleter.h:105:5: note: candidate constructor not viable: no known conversion from 'Deleter<A []>' to 'Deleter<A []> &' for 1st argument
    Deleter(Deleter&);
    ^
1 error generated.
move01.pass.cpp failed to compile
pointer_deleter01.pass.cpp:52:46: error: no viable constructor copying parameter of type 'Deleter<A []>'
    std::unique_ptr<A[], Deleter<A[]> > s(p, Deleter<A[]>());
                                             ^~~~~~~~~~~~~~
In file included from pointer_deleter01.pass.cpp:35:
./../../deleter.h:105:5: note: candidate constructor not viable: no known conversion from 'Deleter<A []>' to 'Deleter<A []> &' for 1st argument
    Deleter(Deleter&);
    ^
1 error generated.
pointer_deleter01.pass.cpp failed to compile
failed 3 tests in /test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor
passed 39 tests in /test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor
swap.pass.cpp:55:48: error: no viable constructor copying parameter of type 'Deleter<A []>'
    std::unique_ptr<A[], Deleter<A[]> > s1(p1, Deleter<A[]>(1));
                                               ^~~~~~~~~~~~~~~
In file included from swap.pass.cpp:33:
./../../deleter.h:105:5: note: candidate constructor not viable: no known conversion from 'Deleter<A []>' to 'Deleter<A []> &' for 1st argument
    Deleter(Deleter&);
    ^
swap.pass.cpp:57:48: error: no viable constructor copying parameter of type 'Deleter<A []>'
    std::unique_ptr<A[], Deleter<A[]> > s2(p2, Deleter<A[]>(2));
                                               ^~~~~~~~~~~~~~~
In file included from swap.pass.cpp:33:
./../../deleter.h:105:5: note: candidate constructor not viable: no known conversion from 'Deleter<A []>' to 'Deleter<A []> &' for 1st argument
    Deleter(Deleter&);
    ^
2 errors generated.
swap.pass.cpp failed to compile
failed 1 tests in /test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers
passed 3 tests in /test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers
passed 6 tests in /test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers
passed 1 tests in /test/utilities/memory/unique.ptr/unique.ptr.single
move_convert13.fail.cpp should not compile
Assertion failed: (s2.get() == p), function main, file move01.pass.cpp, line 57.
./testit: line 97: 74022 Abort trap              ./a.out
move01.pass.cpp failed at run time
In file included from move_convert01.pass.cpp:30:
In file included from ../../../../../../include/memory:209:
../../../../../../include/type_traits:1217:12: error: non-const lvalue reference to type 'std::default_delete<A>' cannot bind to a value of unrelated type 'std::default_delete<B>'
    return t;
           ^
In file included from move_convert01.pass.cpp:30:
../../../../../../include/memory:2198:27: note: in instantiation of function template specialization 'std::forward<std::default_delete<A>, std::default_delete<B> >' requested here
        __ptr_.second() = _STD::forward<deleter_type>(__u.get_deleter());
                          ^
In file included from move_convert01.pass.cpp:30:
In file included from ../../../../../../include/memory:208:
../../../../../../include/__config:117:14: note: instantiated from:
#define _STD std
             ^
move_convert01.pass.cpp:61:8: note: in instantiation of function template specialization 'std::unique_ptr<A, std::default_delete<A> >::operator=<B, std::default_delete<B> >' requested here
    s2 = std::move(s);
       ^
1 error generated.
move_convert01.pass.cpp failed to compile
In file included from move_convert02.pass.cpp:30:
In file included from ../../../../../../include/memory:209:
../../../../../../include/type_traits:1241:14: error: functional-style cast from 'Deleter<B>' to '__rv<Deleter<A> >' is not allowed
    return T(__rv<T>(t));
             ^~~~~~~~
In file included from move_convert02.pass.cpp:30:
../../../../../../include/memory:2198:27: note: in instantiation of function template specialization 'std::forward<Deleter<A>, Deleter<B> >' requested here
        __ptr_.second() = _STD::forward<deleter_type>(__u.get_deleter());
                          ^
In file included from move_convert02.pass.cpp:30:
In file included from ../../../../../../include/memory:208:
../../../../../../include/__config:117:14: note: instantiated from:
#define _STD std
             ^
move_convert02.pass.cpp:63:8: note: in instantiation of function template specialization 'std::unique_ptr<A, Deleter<A> >::operator=<B, Deleter<B> >' requested here
    s2 = std::move(s);
       ^
1 error generated.
move_convert02.pass.cpp failed to compile
In file included from move_convert03.pass.cpp:32:
In file included from ../../../../../../include/memory:209:
../../../../../../include/type_traits:1217:12: error: non-const lvalue reference to type 'CDeleter<A>' cannot bind to a value of unrelated type 'CDeleter<B>'
    return t;
           ^
In file included from move_convert03.pass.cpp:32:
../../../../../../include/memory:2198:27: note: in instantiation of function template specialization 'std::forward<CDeleter<A> &, CDeleter<B> >' requested here
        __ptr_.second() = _STD::forward<deleter_type>(__u.get_deleter());
                          ^
In file included from move_convert03.pass.cpp:32:
In file included from ../../../../../../include/memory:208:
../../../../../../include/__config:117:14: note: instantiated from:
#define _STD std
             ^
move_convert03.pass.cpp:66:8: note: in instantiation of function template specialization 'std::unique_ptr<A, CDeleter<A> &>::operator=<B, CDeleter<B> &>' requested here
    s2 = std::move(s);
       ^
1 error generated.
move_convert03.pass.cpp failed to compile
failed 5 tests in /test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn
passed 12 tests in /test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn
pointer_deleter04.fail.cpp should not compile
move_convert01.pass.cpp:63:24: error: no matching constructor for initialization of 'std::unique_ptr<A>'
    std::unique_ptr<A> s2(std::move(s));
                       ^  ~~~~~~~~~~~~
In file included from move_convert01.pass.cpp:30:
../../../../../../include/memory:2080:5: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, default_delete<B> >, __rv<unique_ptr<B, default_delete<B> > > >::value, unique_ptr<B, default_delete<B> > >::type' (aka 'std::unique_ptr<B, std::default_delete<B> >') to 'std::unique_ptr<A, std::default_delete<A> > &' for 1st argument
    unique_ptr(unique_ptr&);
    ^
../../../../../../include/memory:2082:9: note: candidate constructor [with $0 = B, $1 = std::default_delete<B>] not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, default_delete<B> >, __rv<unique_ptr<B, default_delete<B> > > >::value, unique_ptr<B, default_delete<B> > >::type' (aka 'std::unique_ptr<B, std::default_delete<B> >') to 'unique_ptr<B, std::default_delete<B> > &' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&);
        ^
../../../../../../include/memory:2099:31: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, default_delete<B> >, __rv<unique_ptr<B, default_delete<B> > > >::value, unique_ptr<B, default_delete<B> > >::type' (aka 'std::unique_ptr<B, std::default_delete<B> >') to 'std::nullptr_t' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(nullptr_t)
                              ^
../../../../../../include/memory:2105:40: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, default_delete<B> >, __rv<unique_ptr<B, default_delete<B> > > >::value, unique_ptr<B, default_delete<B> > >::type' (aka 'std::unique_ptr<B, std::default_delete<B> >') to 'pointer' (aka 'A *') for 1st argument
    _LIBCPP_INLINE_VISIBILITY explicit unique_ptr(pointer __p)
                                       ^
../../../../../../include/memory:2191:31: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, default_delete<B> >, __rv<unique_ptr<B, default_delete<B> > > >::value, unique_ptr<B, default_delete<B> > >::type' (aka 'std::unique_ptr<B, std::default_delete<B> >') to '__rv<std::unique_ptr<A, std::default_delete<A> > >' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                              ^
../../../../../../include/memory:2113:44: note: candidate template ignored: failed template argument deduction
        _LIBCPP_INLINE_VISIBILITY explicit unique_ptr(auto_ptr<_Up>& __p,
                                           ^
../../../../../../include/memory:2093:31: note: candidate constructor not viable: requires 0 arguments, but 1 was provided
    _LIBCPP_INLINE_VISIBILITY unique_ptr()
                              ^
../../../../../../include/memory:2202:31: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
    _LIBCPP_INLINE_VISIBILITY unique_ptr(pointer __p, deleter_type __d)
                              ^
1 error generated.
move_convert01.pass.cpp failed to compile
move_convert02.pass.cpp:65:37: error: no matching constructor for initialization of 'std::unique_ptr<A, Deleter<A> >'
    std::unique_ptr<A, Deleter<A> > s2(std::move(s));
                                    ^  ~~~~~~~~~~~~
In file included from move_convert02.pass.cpp:30:
../../../../../../include/memory:2080:5: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, Deleter<B> >, __rv<unique_ptr<B, Deleter<B> > > >::value, unique_ptr<B, Deleter<B> > >::type' (aka 'std::unique_ptr<B, Deleter<B> >') to 'std::unique_ptr<A, Deleter<A> > &' for 1st argument
    unique_ptr(unique_ptr&);
    ^
../../../../../../include/memory:2082:9: note: candidate constructor [with $0 = B, $1 = Deleter<B>] not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, Deleter<B> >, __rv<unique_ptr<B, Deleter<B> > > >::value, unique_ptr<B, Deleter<B> > >::type' (aka 'std::unique_ptr<B, Deleter<B> >') to 'unique_ptr<B, Deleter<B> > &' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&);
        ^
../../../../../../include/memory:2099:31: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, Deleter<B> >, __rv<unique_ptr<B, Deleter<B> > > >::value, unique_ptr<B, Deleter<B> > >::type' (aka 'std::unique_ptr<B, Deleter<B> >') to 'std::nullptr_t' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(nullptr_t)
                              ^
../../../../../../include/memory:2105:40: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, Deleter<B> >, __rv<unique_ptr<B, Deleter<B> > > >::value, unique_ptr<B, Deleter<B> > >::type' (aka 'std::unique_ptr<B, Deleter<B> >') to 'pointer' (aka 'A *') for 1st argument
    _LIBCPP_INLINE_VISIBILITY explicit unique_ptr(pointer __p)
                                       ^
../../../../../../include/memory:2191:31: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, Deleter<B> >, __rv<unique_ptr<B, Deleter<B> > > >::value, unique_ptr<B, Deleter<B> > >::type' (aka 'std::unique_ptr<B, Deleter<B> >') to '__rv<std::unique_ptr<A, Deleter<A> > >' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                              ^
../../../../../../include/memory:2113:44: note: candidate template ignored: failed template argument deduction
        _LIBCPP_INLINE_VISIBILITY explicit unique_ptr(auto_ptr<_Up>& __p,
                                           ^
../../../../../../include/memory:2093:31: note: candidate constructor not viable: requires 0 arguments, but 1 was provided
    _LIBCPP_INLINE_VISIBILITY unique_ptr()
                              ^
../../../../../../include/memory:2202:31: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
    _LIBCPP_INLINE_VISIBILITY unique_ptr(pointer __p, deleter_type __d)
                              ^
1 error generated.
move_convert02.pass.cpp failed to compile
move_convert03.pass.cpp:81:38: error: no matching constructor for initialization of 'std::unique_ptr<A, CDeleter<A> &>'
    std::unique_ptr<A, CDeleter<A>&> s2(std::move(s));
                                     ^  ~~~~~~~~~~~~
In file included from move_convert03.pass.cpp:30:
../../../../../../include/memory:2080:5: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<A> &>, __rv<unique_ptr<B, CDeleter<A> &> > >::value, unique_ptr<B, CDeleter<A> &> >::type' (aka 'std::unique_ptr<B, CDeleter<A> &>') to 'std::unique_ptr<A, CDeleter<A> &> &' for 1st argument
    unique_ptr(unique_ptr&);
    ^
../../../../../../include/memory:2082:9: note: candidate constructor [with $0 = B, $1 = CDeleter<A> &] not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<A> &>, __rv<unique_ptr<B, CDeleter<A> &> > >::value, unique_ptr<B, CDeleter<A> &> >::type' (aka 'std::unique_ptr<B, CDeleter<A> &>') to 'unique_ptr<B, CDeleter<A> &> &' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&);
        ^
../../../../../../include/memory:2099:31: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<A> &>, __rv<unique_ptr<B, CDeleter<A> &> > >::value, unique_ptr<B, CDeleter<A> &> >::type' (aka 'std::unique_ptr<B, CDeleter<A> &>') to 'std::nullptr_t' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(nullptr_t)
                              ^
../../../../../../include/memory:2105:40: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<A> &>, __rv<unique_ptr<B, CDeleter<A> &> > >::value, unique_ptr<B, CDeleter<A> &> >::type' (aka 'std::unique_ptr<B, CDeleter<A> &>') to 'pointer' (aka 'A *') for 1st argument
    _LIBCPP_INLINE_VISIBILITY explicit unique_ptr(pointer __p)
                                       ^
../../../../../../include/memory:2191:31: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<A> &>, __rv<unique_ptr<B, CDeleter<A> &> > >::value, unique_ptr<B, CDeleter<A> &> >::type' (aka 'std::unique_ptr<B, CDeleter<A> &>') to '__rv<std::unique_ptr<A, CDeleter<A> &> >' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                              ^
../../../../../../include/memory:2113:44: note: candidate template ignored: failed template argument deduction
        _LIBCPP_INLINE_VISIBILITY explicit unique_ptr(auto_ptr<_Up>& __p,
                                           ^
../../../../../../include/memory:2093:31: note: candidate constructor not viable: requires 0 arguments, but 1 was provided
    _LIBCPP_INLINE_VISIBILITY unique_ptr()
                              ^
../../../../../../include/memory:2202:31: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
    _LIBCPP_INLINE_VISIBILITY unique_ptr(pointer __p, deleter_type __d)
                              ^
1 error generated.
move_convert03.pass.cpp failed to compile
move_convert04.pass.cpp:63:24: error: no viable conversion from 'enable_if<is_convertible<unique_ptr<B, default_delete<B> >, __rv<unique_ptr<B, default_delete<B> > > >::value, unique_ptr<B, default_delete<B> > >::type' (aka 'std::unique_ptr<B, std::default_delete<B> >') to 'std::unique_ptr<A>'
    std::unique_ptr<A> s2 = std::move(s);
                       ^    ~~~~~~~~~~~~
In file included from move_convert04.pass.cpp:30:
../../../../../../include/memory:2080:5: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, default_delete<B> >, __rv<unique_ptr<B, default_delete<B> > > >::value, unique_ptr<B, default_delete<B> > >::type' (aka 'std::unique_ptr<B, std::default_delete<B> >') to 'std::unique_ptr<A, std::default_delete<A> > &' for 1st argument
    unique_ptr(unique_ptr&);
    ^
../../../../../../include/memory:2082:9: note: candidate constructor [with $0 = B, $1 = std::default_delete<B>] not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, default_delete<B> >, __rv<unique_ptr<B, default_delete<B> > > >::value, unique_ptr<B, default_delete<B> > >::type' (aka 'std::unique_ptr<B, std::default_delete<B> >') to 'unique_ptr<B, std::default_delete<B> > &' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&);
        ^
../../../../../../include/memory:2099:31: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, default_delete<B> >, __rv<unique_ptr<B, default_delete<B> > > >::value, unique_ptr<B, default_delete<B> > >::type' (aka 'std::unique_ptr<B, std::default_delete<B> >') to 'std::nullptr_t' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(nullptr_t)
                              ^
../../../../../../include/memory:2191:31: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, default_delete<B> >, __rv<unique_ptr<B, default_delete<B> > > >::value, unique_ptr<B, default_delete<B> > >::type' (aka 'std::unique_ptr<B, std::default_delete<B> >') to '__rv<std::unique_ptr<A, std::default_delete<A> > >' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                              ^
../../../../../../include/memory:2186:31: note: candidate function
    _LIBCPP_INLINE_VISIBILITY operator __rv<unique_ptr>()
                              ^
../../../../../../include/memory:2230:31: note: candidate function
    _LIBCPP_INLINE_VISIBILITY operator int __nat::*() const {return __ptr_.first() ? &__nat::__for_bool_ : 0;}
                              ^
1 error generated.
move_convert04.pass.cpp failed to compile
move_convert05.pass.cpp:65:37: error: no viable conversion from 'enable_if<is_convertible<unique_ptr<B, Deleter<B> >, __rv<unique_ptr<B, Deleter<B> > > >::value, unique_ptr<B, Deleter<B> > >::type' (aka 'std::unique_ptr<B, Deleter<B> >') to 'std::unique_ptr<A, Deleter<A> >'
    std::unique_ptr<A, Deleter<A> > s2 = std::move(s);
                                    ^    ~~~~~~~~~~~~
In file included from move_convert05.pass.cpp:30:
../../../../../../include/memory:2080:5: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, Deleter<B> >, __rv<unique_ptr<B, Deleter<B> > > >::value, unique_ptr<B, Deleter<B> > >::type' (aka 'std::unique_ptr<B, Deleter<B> >') to 'std::unique_ptr<A, Deleter<A> > &' for 1st argument
    unique_ptr(unique_ptr&);
    ^
../../../../../../include/memory:2082:9: note: candidate constructor [with $0 = B, $1 = Deleter<B>] not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, Deleter<B> >, __rv<unique_ptr<B, Deleter<B> > > >::value, unique_ptr<B, Deleter<B> > >::type' (aka 'std::unique_ptr<B, Deleter<B> >') to 'unique_ptr<B, Deleter<B> > &' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&);
        ^
../../../../../../include/memory:2099:31: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, Deleter<B> >, __rv<unique_ptr<B, Deleter<B> > > >::value, unique_ptr<B, Deleter<B> > >::type' (aka 'std::unique_ptr<B, Deleter<B> >') to 'std::nullptr_t' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(nullptr_t)
                              ^
../../../../../../include/memory:2191:31: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, Deleter<B> >, __rv<unique_ptr<B, Deleter<B> > > >::value, unique_ptr<B, Deleter<B> > >::type' (aka 'std::unique_ptr<B, Deleter<B> >') to '__rv<std::unique_ptr<A, Deleter<A> > >' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                              ^
../../../../../../include/memory:2186:31: note: candidate function
    _LIBCPP_INLINE_VISIBILITY operator __rv<unique_ptr>()
                              ^
../../../../../../include/memory:2230:31: note: candidate function
    _LIBCPP_INLINE_VISIBILITY operator int __nat::*() const {return __ptr_.first() ? &__nat::__for_bool_ : 0;}
                              ^
1 error generated.
move_convert05.pass.cpp failed to compile
move_convert06.pass.cpp:81:38: error: no viable conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<A> &>, __rv<unique_ptr<B, CDeleter<A> &> > >::value, unique_ptr<B, CDeleter<A> &> >::type' (aka 'std::unique_ptr<B, CDeleter<A> &>') to 'std::unique_ptr<A, CDeleter<A> &>'
    std::unique_ptr<A, CDeleter<A>&> s2 = std::move(s);
                                     ^    ~~~~~~~~~~~~
In file included from move_convert06.pass.cpp:30:
../../../../../../include/memory:2080:5: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<A> &>, __rv<unique_ptr<B, CDeleter<A> &> > >::value, unique_ptr<B, CDeleter<A> &> >::type' (aka 'std::unique_ptr<B, CDeleter<A> &>') to 'std::unique_ptr<A, CDeleter<A> &> &' for 1st argument
    unique_ptr(unique_ptr&);
    ^
../../../../../../include/memory:2082:9: note: candidate constructor [with $0 = B, $1 = CDeleter<A> &] not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<A> &>, __rv<unique_ptr<B, CDeleter<A> &> > >::value, unique_ptr<B, CDeleter<A> &> >::type' (aka 'std::unique_ptr<B, CDeleter<A> &>') to 'unique_ptr<B, CDeleter<A> &> &' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&);
        ^
../../../../../../include/memory:2099:31: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<A> &>, __rv<unique_ptr<B, CDeleter<A> &> > >::value, unique_ptr<B, CDeleter<A> &> >::type' (aka 'std::unique_ptr<B, CDeleter<A> &>') to 'std::nullptr_t' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(nullptr_t)
                              ^
../../../../../../include/memory:2191:31: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<A> &>, __rv<unique_ptr<B, CDeleter<A> &> > >::value, unique_ptr<B, CDeleter<A> &> >::type' (aka 'std::unique_ptr<B, CDeleter<A> &>') to '__rv<std::unique_ptr<A, CDeleter<A> &> >' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                              ^
../../../../../../include/memory:2186:31: note: candidate function
    _LIBCPP_INLINE_VISIBILITY operator __rv<unique_ptr>()
                              ^
../../../../../../include/memory:2230:31: note: candidate function
    _LIBCPP_INLINE_VISIBILITY operator int __nat::*() const {return __ptr_.first() ? &__nat::__for_bool_ : 0;}
                              ^
1 error generated.
move_convert06.pass.cpp failed to compile
move_convert07.pass.cpp:66:38: error: no viable conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<B> &>, __rv<unique_ptr<B, CDeleter<B> &> > >::value, unique_ptr<B, CDeleter<B> &> >::type' (aka 'std::unique_ptr<B, CDeleter<B> &>') to 'std::unique_ptr<A, CDeleter<A> >'
    std::unique_ptr<A, CDeleter<A> > s2 = std::move(s);
                                     ^    ~~~~~~~~~~~~
In file included from move_convert07.pass.cpp:30:
../../../../../../include/memory:2080:5: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<B> &>, __rv<unique_ptr<B, CDeleter<B> &> > >::value, unique_ptr<B, CDeleter<B> &> >::type' (aka 'std::unique_ptr<B, CDeleter<B> &>') to 'std::unique_ptr<A, CDeleter<A> > &' for 1st argument
    unique_ptr(unique_ptr&);
    ^
../../../../../../include/memory:2082:9: note: candidate constructor [with $0 = B, $1 = CDeleter<B> &] not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<B> &>, __rv<unique_ptr<B, CDeleter<B> &> > >::value, unique_ptr<B, CDeleter<B> &> >::type' (aka 'std::unique_ptr<B, CDeleter<B> &>') to 'unique_ptr<B, CDeleter<B> &> &' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&);
        ^
../../../../../../include/memory:2099:31: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<B> &>, __rv<unique_ptr<B, CDeleter<B> &> > >::value, unique_ptr<B, CDeleter<B> &> >::type' (aka 'std::unique_ptr<B, CDeleter<B> &>') to 'std::nullptr_t' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(nullptr_t)
                              ^
../../../../../../include/memory:2191:31: note: candidate constructor not viable: no known conversion from 'enable_if<is_convertible<unique_ptr<B, CDeleter<B> &>, __rv<unique_ptr<B, CDeleter<B> &> > >::value, unique_ptr<B, CDeleter<B> &> >::type' (aka 'std::unique_ptr<B, CDeleter<B> &>') to '__rv<std::unique_ptr<A, CDeleter<A> > >' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                              ^
../../../../../../include/memory:2186:31: note: candidate function
    _LIBCPP_INLINE_VISIBILITY operator __rv<unique_ptr>()
                              ^
../../../../../../include/memory:2230:31: note: candidate function
    _LIBCPP_INLINE_VISIBILITY operator int __nat::*() const {return __ptr_.first() ? &__nat::__for_bool_ : 0;}
                              ^
1 error generated.
move_convert07.pass.cpp failed to compile
failed 8 tests in /test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor
passed 40 tests in /test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor
passed 1 tests in /test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.dtor
passed 5 tests in /test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers
passed 6 tests in /test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers
swap.pass.cpp:76:48: error: no viable constructor copying parameter of type 'Deleter<A []>'
    std::unique_ptr<A[], Deleter<A[]> > s1(p1, Deleter<A[]>(1));
                                               ^~~~~~~~~~~~~~~
In file included from swap.pass.cpp:33:
./../deleter.h:105:5: note: candidate constructor not viable: no known conversion from 'Deleter<A []>' to 'Deleter<A []> &' for 1st argument
    Deleter(Deleter&);
    ^
swap.pass.cpp:78:48: error: no viable constructor copying parameter of type 'Deleter<A []>'
    std::unique_ptr<A[], Deleter<A[]> > s2(p2, Deleter<A[]>(2));
                                               ^~~~~~~~~~~~~~~
In file included from swap.pass.cpp:33:
./../deleter.h:105:5: note: candidate constructor not viable: no known conversion from 'Deleter<A []>' to 'Deleter<A []> &' for 1st argument
    Deleter(Deleter&);
    ^
2 errors generated.
swap.pass.cpp failed to compile
failed 1 tests in /test/utilities/memory/unique.ptr/unique.ptr.special
passed 2 tests in /test/utilities/memory/unique.ptr/unique.ptr.special
passed 3 tests in /test/utilities/memory/util.dynamic.safety
passed 1 tests in /test/utilities/memory/util.smartptr
passed 1 tests in /test/utilities/memory/util.smartptr/util.smartptr.enab
not implemented:  /test/utilities/memory/util.smartptr/util.smartptr.hash
passed 1 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared
passed 1 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.getdeleter
Assertion failed: (pB.use_count() == 1), function main, file shared_ptr_Y_rv.pass.cpp, line 67.
./testit: line 97: 74443 Abort trap              ./a.out
shared_ptr_Y_rv.pass.cpp failed at run time
Assertion failed: (pB.use_count() == 1), function main, file shared_ptr_rv.pass.cpp, line 67.
./testit: line 97: 74450 Abort trap              ./a.out
shared_ptr_rv.pass.cpp failed at run time
clang: error: compiler command failed due to signal 11 (use -v to see invocation)
unique_ptr_Y.pass.cpp failed to compile
failed 3 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign
passed 3 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign
passed 3 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast
passed 2 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp
clang: error: compiler command failed due to signal 11 (use -v to see invocation)
unique_ptr.pass.cpp failed to compile
failed 1 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const
passed 19 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const
passed 2 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create
passed 1 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.dest
passed 1 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.io
passed 5 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod
passed 6 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs
passed 1 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.spec
not implemented:  /test/utilities/memory/util.smartptr/util.smartptr.shared.atomic
passed 1 tests in /test/utilities/memory/util.smartptr/util.smartptr.weak
passed 1 tests in /test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.ownerless
passed 3 tests in /test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign
passed 4 tests in /test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const
passed 1 tests in /test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.dest
passed 2 tests in /test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.mod
passed 5 tests in /test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs
passed 1 tests in /test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.spec
passed 1 tests in /test/utilities/memory/util.smartptr/util.smartptr.weakptr
passed 1 tests in /test/utilities/meta
passed 1 tests in /test/utilities/meta/meta.hel
is_convertible.pass.cpp:111:5: warning: qualifier on function type 'Function' (aka 'void ()') has unspecified behavior
    static_assert(( std::is_convertible<Function&, const Function&>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_convertible.pass.cpp:111:52: note: instantiated from:
    static_assert(( std::is_convertible<Function&, const Function&>::value), "");
                                                   ^~~~~~~~~~~~~~
is_convertible.pass.cpp:289:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert((!std::is_convertible<char, char&>::value), "");
    ^
In file included from is_convertible.pass.cpp:28:
In file included from ../../../../include/type_traits:154:
../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
1 warning and 1 error generated.
is_convertible.pass.cpp failed to compile
is_explicitly_convertible.pass.cpp:36:5: error: no member named 'is_explicitly_convertible' in namespace 'std'
    static_assert(( std::is_explicitly_convertible<void, void>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_explicitly_convertible.pass.cpp:36:26: note: instantiated from:
    static_assert(( std::is_explicitly_convertible<void, void>::value), "");
                    ~~~~~^
is_explicitly_convertible.pass.cpp:36:5: error: type name requires a specifier or qualifier
    static_assert(( std::is_explicitly_convertible<void, void>::value), "");
    ^
In file included from is_explicitly_convertible.pass.cpp:28:
In file included from ../../../../include/type_traits:154:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_explicitly_convertible.pass.cpp:36:5: error: C++ requires a type specifier for all declarations
    static_assert(( std::is_explicitly_convertible<void, void>::value), "");
    ^
In file included from is_explicitly_convertible.pass.cpp:28:
In file included from ../../../../include/type_traits:154:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_explicitly_convertible.pass.cpp:37:5: error: no member named 'is_explicitly_convertible' in namespace 'std'
    static_assert(( std::is_explicitly_convertible<const void, void>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_explicitly_convertible.pass.cpp:37:26: note: instantiated from:
    static_assert(( std::is_explicitly_convertible<const void, void>::value), "");
                    ~~~~~^
is_explicitly_convertible.pass.cpp:37:5: error: type name requires a specifier or qualifier
    static_assert(( std::is_explicitly_convertible<const void, void>::value), "");
    ^
In file included from is_explicitly_convertible.pass.cpp:28:
In file included from ../../../../include/type_traits:154:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_explicitly_convertible.pass.cpp:37:5: error: C++ requires a type specifier for all declarations
    static_assert(( std::is_explicitly_convertible<const void, void>::value), "");
    ^
In file included from is_explicitly_convertible.pass.cpp:28:
In file included from ../../../../include/type_traits:154:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_explicitly_convertible.pass.cpp:38:5: error: no member named 'is_explicitly_convertible' in namespace 'std'
    static_assert(( std::is_explicitly_convertible<void, const void>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_explicitly_convertible.pass.cpp:38:26: note: instantiated from:
    static_assert(( std::is_explicitly_convertible<void, const void>::value), "");
                    ~~~~~^
is_explicitly_convertible.pass.cpp:38:5: error: type name requires a specifier or qualifier
    static_assert(( std::is_explicitly_convertible<void, const void>::value), "");
    ^
In file included from is_explicitly_convertible.pass.cpp:28:
In file included from ../../../../include/type_traits:154:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_explicitly_convertible.pass.cpp:38:5: error: C++ requires a type specifier for all declarations
    static_assert(( std::is_explicitly_convertible<void, const void>::value), "");
    ^
In file included from is_explicitly_convertible.pass.cpp:28:
In file included from ../../../../include/type_traits:154:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_explicitly_convertible.pass.cpp:39:5: error: no member named 'is_explicitly_convertible' in namespace 'std'
    static_assert(( std::is_explicitly_convertible<const void, const void>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_explicitly_convertible.pass.cpp:39:26: note: instantiated from:
    static_assert(( std::is_explicitly_convertible<const void, const void>::value), "");
                    ~~~~~^
is_explicitly_convertible.pass.cpp:39:5: error: type name requires a specifier or qualifier
    static_assert(( std::is_explicitly_convertible<const void, const void>::value), "");
    ^
In file included from is_explicitly_convertible.pass.cpp:28:
In file included from ../../../../include/type_traits:154:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_explicitly_convertible.pass.cpp:39:5: error: C++ requires a type specifier for all declarations
    static_assert(( std::is_explicitly_convertible<const void, const void>::value), "");
    ^
In file included from is_explicitly_convertible.pass.cpp:28:
In file included from ../../../../include/type_traits:154:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_explicitly_convertible.pass.cpp:41:5: error: no member named 'is_explicitly_convertible' in namespace 'std'
    static_assert((!std::is_explicitly_convertible<void, Function>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_explicitly_convertible.pass.cpp:41:26: note: instantiated from:
    static_assert((!std::is_explicitly_convertible<void, Function>::value), "");
                    ~~~~~^
is_explicitly_convertible.pass.cpp:41:5: error: type name requires a specifier or qualifier
    static_assert((!std::is_explicitly_convertible<void, Function>::value), "");
    ^
In file included from is_explicitly_convertible.pass.cpp:28:
In file included from ../../../../include/type_traits:154:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_explicitly_convertible.pass.cpp:41:5: error: C++ requires a type specifier for all declarations
    static_assert((!std::is_explicitly_convertible<void, Function>::value), "");
    ^
In file included from is_explicitly_convertible.pass.cpp:28:
In file included from ../../../../include/type_traits:154:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_explicitly_convertible.pass.cpp:42:5: error: no member named 'is_explicitly_convertible' in namespace 'std'
    static_assert((!std::is_explicitly_convertible<const void, Function>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_explicitly_convertible.pass.cpp:42:26: note: instantiated from:
    static_assert((!std::is_explicitly_convertible<const void, Function>::value), "");
                    ~~~~~^
is_explicitly_convertible.pass.cpp:42:5: error: type name requires a specifier or qualifier
    static_assert((!std::is_explicitly_convertible<const void, Function>::value), "");
    ^
In file included from is_explicitly_convertible.pass.cpp:28:
In file included from ../../../../include/type_traits:154:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_explicitly_convertible.pass.cpp:42:5: error: C++ requires a type specifier for all declarations
    static_assert((!std::is_explicitly_convertible<const void, Function>::value), "");
    ^
In file included from is_explicitly_convertible.pass.cpp:28:
In file included from ../../../../include/type_traits:154:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_explicitly_convertible.pass.cpp:44:5: error: no member named 'is_explicitly_convertible' in namespace 'std'
    static_assert((!std::is_explicitly_convertible<void, Function&>::value), "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_explicitly_convertible.pass.cpp:44:26: note: instantiated from:
    static_assert((!std::is_explicitly_convertible<void, Function&>::value), "");
                    ~~~~~^
fatal error: too many errors emitted, stopping now
20 errors generated.
is_explicitly_convertible.pass.cpp failed to compile
failed 2 tests in /test/utilities/meta/meta.rel
passed 2 tests in /test/utilities/meta/meta.rel
passed 1 tests in /test/utilities/meta/meta.rqmts
passed 1 tests in /test/utilities/meta/meta.trans
passed 2 tests in /test/utilities/meta/meta.trans/meta.trans.arr
passed 6 tests in /test/utilities/meta/meta.trans/meta.trans.cv
aligned_storage.pass.cpp:39:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(std::alignment_of<T1>::value == 2, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:44:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(std::alignment_of<T1>::value == 4, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:45:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(sizeof(T1) == 12, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:49:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(std::alignment_of<T1>::value == 8, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:50:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(sizeof(T1) == 16, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:54:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(std::alignment_of<T1>::value == 16, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:55:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(sizeof(T1) == 16, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:59:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(std::alignment_of<T1>::value == 32, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:60:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(sizeof(T1) == 32, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:64:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(std::alignment_of<T1>::value == 32, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:65:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(sizeof(T1) == 32, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:69:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(std::alignment_of<T1>::value == 32, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:70:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(sizeof(T1) == 64, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:74:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(std::alignment_of<T1>::value == 16, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:75:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(sizeof(T1) == 16, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:84:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(std::alignment_of<T1>::value == 2, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:89:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(std::alignment_of<T1>::value == 2, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:90:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(sizeof(T1) == 4, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
aligned_storage.pass.cpp:94:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(std::alignment_of<T1>::value == 4, "");
    ^
In file included from aligned_storage.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
fatal error: too many errors emitted, stopping now
20 errors generated.
aligned_storage.pass.cpp failed to compile
underlying_type.pass.cpp:32:2: error: #error underlying_type is not implemented
#error underlying_type is not implemented
 ^
1 error generated.
underlying_type.pass.cpp failed to compile
failed 2 tests in /test/utilities/meta/meta.trans/meta.trans.other
passed 6 tests in /test/utilities/meta/meta.trans/meta.trans.other
passed 2 tests in /test/utilities/meta/meta.trans/meta.trans.ptr
passed 3 tests in /test/utilities/meta/meta.trans/meta.trans.ref
passed 2 tests in /test/utilities/meta/meta.trans/meta.trans.sign
passed 1 tests in /test/utilities/meta/meta.type.synop
passed 1 tests in /test/utilities/meta/meta.unary
union.pass.cpp:43:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_union<T>::value, "");
    ^
In file included from union.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
union.pass.cpp:51:5: note: in instantiation of function template specialization 'test_union_imp<Union>' requested here
    test_union_imp<T>();
    ^
union.pass.cpp:65:5: note: in instantiation of function template specialization 'test_union<Union>' requested here
    test_union<Union>();
    ^
In file included from union.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
union.pass.cpp:44:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(!std::is_class<T>::value, "");
    ^
In file included from union.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
union.pass.cpp:43:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_union<T>::value, "");
    ^
In file included from union.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
union.pass.cpp:52:5: note: in instantiation of function template specialization 'test_union_imp<Union const>' requested here
    test_union_imp<const T>();
    ^
union.pass.cpp:65:5: note: in instantiation of function template specialization 'test_union<Union>' requested here
    test_union<Union>();
    ^
In file included from union.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
union.pass.cpp:44:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(!std::is_class<T>::value, "");
    ^
In file included from union.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
union.pass.cpp:43:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_union<T>::value, "");
    ^
In file included from union.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
union.pass.cpp:53:5: note: in instantiation of function template specialization 'test_union_imp<Union volatile>' requested here
    test_union_imp<volatile T>();
    ^
union.pass.cpp:65:5: note: in instantiation of function template specialization 'test_union<Union>' requested here
    test_union<Union>();
    ^
In file included from union.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
union.pass.cpp:44:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(!std::is_class<T>::value, "");
    ^
In file included from union.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
union.pass.cpp:43:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_union<T>::value, "");
    ^
In file included from union.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
union.pass.cpp:54:5: note: in instantiation of function template specialization 'test_union_imp<Union const volatile>' requested here
    test_union_imp<const volatile T>();
    ^
union.pass.cpp:65:5: note: in instantiation of function template specialization 'test_union<Union>' requested here
    test_union<Union>();
    ^
In file included from union.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
union.pass.cpp:44:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(!std::is_class<T>::value, "");
    ^
In file included from union.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
8 errors generated.
union.pass.cpp failed to compile
failed 1 tests in /test/utilities/meta/meta.unary/meta.unary.cat
passed 12 tests in /test/utilities/meta/meta.unary/meta.unary.cat
passed 13 tests in /test/utilities/meta/meta.unary/meta.unary.comp
has_copy_assign.pass.cpp:32:2: error: #error has_copy_assign not implemented
#error has_copy_assign not implemented
 ^
1 error generated.
has_copy_assign.pass.cpp failed to compile
has_copy_constructor.pass.cpp:32:2: error: #error has_copy_constructor not implemented
#error has_copy_constructor not implemented
 ^
1 error generated.
has_copy_constructor.pass.cpp failed to compile
has_default_constructor.pass.cpp:32:2: error: #error has_default_constructor not implemented
#error has_default_constructor not implemented
 ^
1 error generated.
has_default_constructor.pass.cpp failed to compile
has_move_assign.pass.cpp:32:2: error: #error has_move_assign not implemented
#error has_move_assign not implemented
 ^
1 error generated.
has_move_assign.pass.cpp failed to compile
has_move_constructor.pass.cpp:32:2: error: #error has_move_constructor not implemented
#error has_move_constructor not implemented
 ^
1 error generated.
has_move_constructor.pass.cpp failed to compile
has_nothrow_copy_assign.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_assign<T>::value, "");
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_copy_assign.pass.cpp:80:5: note: in instantiation of function template specialization 'test_has_nothrow_assign<Union>' requested here
    test_has_nothrow_assign<Union>();
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_assign.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_assign<volatile T>::value, "");
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_assign.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_assign<T>::value, "");
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_copy_assign.pass.cpp:81:5: note: in instantiation of function template specialization 'test_has_nothrow_assign<Abstract>' requested here
    test_has_nothrow_assign<Abstract>();
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_assign.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_assign<volatile T>::value, "");
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_assign.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_assign<T>::value, "");
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_copy_assign.pass.cpp:82:5: note: in instantiation of function template specialization 'test_has_nothrow_assign<Empty>' requested here
    test_has_nothrow_assign<Empty>();
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_assign.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_assign<volatile T>::value, "");
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_assign.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_assign<T>::value, "");
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_copy_assign.pass.cpp:89:5: note: in instantiation of function template specialization 'test_has_nothrow_assign<NotEmpty>' requested here
    test_has_nothrow_assign<NotEmpty>();
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_assign.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_assign<volatile T>::value, "");
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_assign.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_assign<T>::value, "");
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_copy_assign.pass.cpp:90:5: note: in instantiation of function template specialization 'test_has_nothrow_assign<bit_zero>' requested here
    test_has_nothrow_assign<bit_zero>();
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_assign.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_assign<volatile T>::value, "");
    ^
In file included from has_nothrow_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
10 errors generated.
has_nothrow_copy_assign.pass.cpp failed to compile
has_nothrow_copy_constructor.pass.cpp:42:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(!std::has_nothrow_copy_constructor<T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_copy_constructor.pass.cpp:78:5: note: in instantiation of function template specialization 'test_has_not_nothrow_copy_constructor<int &>' requested here
    test_has_not_nothrow_copy_constructor<int&>();
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:43:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(!std::has_nothrow_copy_constructor<const T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:44:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(!std::has_nothrow_copy_constructor<volatile T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:45:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(!std::has_nothrow_copy_constructor<const volatile T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_copy_constructor.pass.cpp:80:5: note: in instantiation of function template specialization 'test_has_nothrow_copy_constructor<Union>' requested here
    test_has_nothrow_copy_constructor<Union>();
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<const T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<volatile T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<const volatile T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_copy_constructor.pass.cpp:81:5: note: in instantiation of function template specialization 'test_has_nothrow_copy_constructor<Abstract>' requested here
    test_has_nothrow_copy_constructor<Abstract>();
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<const T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<volatile T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<const volatile T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_copy_constructor.pass.cpp:82:5: note: in instantiation of function template specialization 'test_has_nothrow_copy_constructor<Empty>' requested here
    test_has_nothrow_copy_constructor<Empty>();
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<const T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<volatile T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<const volatile T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_copy_constructor.pass.cpp:89:5: note: in instantiation of function template specialization 'test_has_nothrow_copy_constructor<NotEmpty>' requested here
    test_has_nothrow_copy_constructor<NotEmpty>();
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<const T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_copy_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_copy_constructor<volatile T>::value, "");
    ^
In file included from has_nothrow_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
fatal error: too many errors emitted, stopping now
20 errors generated.
has_nothrow_copy_constructor.pass.cpp failed to compile
has_nothrow_default_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_default_constructor.pass.cpp:80:5: note: in instantiation of function template specialization 'test_has_nothrow_default_constructor<Union>' requested here
    test_has_nothrow_default_constructor<Union>();
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<const T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<volatile T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<const volatile T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_default_constructor.pass.cpp:81:5: note: in instantiation of function template specialization 'test_has_nothrow_default_constructor<Abstract>' requested here
    test_has_nothrow_default_constructor<Abstract>();
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<const T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<volatile T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<const volatile T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_default_constructor.pass.cpp:82:5: note: in instantiation of function template specialization 'test_has_nothrow_default_constructor<Empty>' requested here
    test_has_nothrow_default_constructor<Empty>();
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<const T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<volatile T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<const volatile T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_default_constructor.pass.cpp:89:5: note: in instantiation of function template specialization 'test_has_nothrow_default_constructor<NotEmpty>' requested here
    test_has_nothrow_default_constructor<NotEmpty>();
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<const T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<volatile T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<const volatile T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_nothrow_default_constructor.pass.cpp:90:5: note: in instantiation of function template specialization 'test_has_nothrow_default_constructor<bit_zero>' requested here
    test_has_nothrow_default_constructor<bit_zero>();
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<const T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_nothrow_default_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_nothrow_default_constructor<volatile T>::value, "");
    ^
In file included from has_nothrow_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
fatal error: too many errors emitted, stopping now
20 errors generated.
has_nothrow_default_constructor.pass.cpp failed to compile
has_nothrow_move_assign.pass.cpp:32:2: error: #error has_nothrow_move_assign not implemented
#error has_nothrow_move_assign not implemented
 ^
1 error generated.
has_nothrow_move_assign.pass.cpp failed to compile
has_nothrow_move_constructor.pass.cpp:32:2: error: #error has_nothrow_move_constructor not implemented
#error has_nothrow_move_constructor not implemented
 ^
1 error generated.
has_nothrow_move_constructor.pass.cpp failed to compile
has_trivial_copy_assign.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_assign<T>::value, "");
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_copy_assign.pass.cpp:80:5: note: in instantiation of function template specialization 'test_has_trivial_assign<Union>' requested here
    test_has_trivial_assign<Union>();
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_assign.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_assign<volatile T>::value, "");
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_assign.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_assign<T>::value, "");
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_copy_assign.pass.cpp:81:5: note: in instantiation of function template specialization 'test_has_trivial_assign<Abstract>' requested here
    test_has_trivial_assign<Abstract>();
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_assign.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_assign<volatile T>::value, "");
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_assign.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_assign<T>::value, "");
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_copy_assign.pass.cpp:82:5: note: in instantiation of function template specialization 'test_has_trivial_assign<Empty>' requested here
    test_has_trivial_assign<Empty>();
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_assign.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_assign<volatile T>::value, "");
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_assign.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_assign<T>::value, "");
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_copy_assign.pass.cpp:89:5: note: in instantiation of function template specialization 'test_has_trivial_assign<NotEmpty>' requested here
    test_has_trivial_assign<NotEmpty>();
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_assign.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_assign<volatile T>::value, "");
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_assign.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_assign<T>::value, "");
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_copy_assign.pass.cpp:90:5: note: in instantiation of function template specialization 'test_has_trivial_assign<bit_zero>' requested here
    test_has_trivial_assign<bit_zero>();
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_assign.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_assign<volatile T>::value, "");
    ^
In file included from has_trivial_copy_assign.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
10 errors generated.
has_trivial_copy_assign.pass.cpp failed to compile
has_trivial_copy_constructor.pass.cpp:42:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(!std::has_trivial_copy_constructor<T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_copy_constructor.pass.cpp:78:5: note: in instantiation of function template specialization 'test_has_not_trivial_copy_constructor<int &>' requested here
    test_has_not_trivial_copy_constructor<int&>();
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:43:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(!std::has_trivial_copy_constructor<const T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:44:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(!std::has_trivial_copy_constructor<volatile T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:45:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert(!std::has_trivial_copy_constructor<const volatile T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_copy_constructor.pass.cpp:80:5: note: in instantiation of function template specialization 'test_has_trivial_copy_constructor<Union>' requested here
    test_has_trivial_copy_constructor<Union>();
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<const T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<volatile T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<const volatile T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_copy_constructor.pass.cpp:81:5: note: in instantiation of function template specialization 'test_has_trivial_copy_constructor<Abstract>' requested here
    test_has_trivial_copy_constructor<Abstract>();
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<const T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<volatile T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<const volatile T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_copy_constructor.pass.cpp:82:5: note: in instantiation of function template specialization 'test_has_trivial_copy_constructor<Empty>' requested here
    test_has_trivial_copy_constructor<Empty>();
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<const T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<volatile T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<const volatile T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_copy_constructor.pass.cpp:89:5: note: in instantiation of function template specialization 'test_has_trivial_copy_constructor<NotEmpty>' requested here
    test_has_trivial_copy_constructor<NotEmpty>();
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<const T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_copy_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_copy_constructor<volatile T>::value, "");
    ^
In file included from has_trivial_copy_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
fatal error: too many errors emitted, stopping now
20 errors generated.
has_trivial_copy_constructor.pass.cpp failed to compile
has_trivial_default_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_default_constructor.pass.cpp:80:5: note: in instantiation of function template specialization 'test_has_trivial_default_constructor<Union>' requested here
    test_has_trivial_default_constructor<Union>();
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<const T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<volatile T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<const volatile T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_default_constructor.pass.cpp:81:5: note: in instantiation of function template specialization 'test_has_trivial_default_constructor<Abstract>' requested here
    test_has_trivial_default_constructor<Abstract>();
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<const T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<volatile T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<const volatile T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_default_constructor.pass.cpp:82:5: note: in instantiation of function template specialization 'test_has_trivial_default_constructor<Empty>' requested here
    test_has_trivial_default_constructor<Empty>();
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<const T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<volatile T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<const volatile T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_default_constructor.pass.cpp:89:5: note: in instantiation of function template specialization 'test_has_trivial_default_constructor<NotEmpty>' requested here
    test_has_trivial_default_constructor<NotEmpty>();
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<const T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<volatile T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<const volatile T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_default_constructor.pass.cpp:90:5: note: in instantiation of function template specialization 'test_has_trivial_default_constructor<bit_zero>' requested here
    test_has_trivial_default_constructor<bit_zero>();
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<const T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_default_constructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_default_constructor<volatile T>::value, "");
    ^
In file included from has_trivial_default_constructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
fatal error: too many errors emitted, stopping now
20 errors generated.
has_trivial_default_constructor.pass.cpp failed to compile
has_trivial_destructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_destructor<T>::value, "");
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_destructor.pass.cpp:82:5: note: in instantiation of function template specialization 'test_has_trivial_destructor<Union>' requested here
    test_has_trivial_destructor<Union>();
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_destructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_destructor<const T>::value, "");
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_destructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_destructor<volatile T>::value, "");
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_destructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_destructor<const volatile T>::value, "");
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_destructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_destructor<T>::value, "");
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_destructor.pass.cpp:83:5: note: in instantiation of function template specialization 'test_has_trivial_destructor<Empty>' requested here
    test_has_trivial_destructor<Empty>();
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_destructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_destructor<const T>::value, "");
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_destructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_destructor<volatile T>::value, "");
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_destructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_destructor<const volatile T>::value, "");
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_destructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_destructor<T>::value, "");
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_trivial_destructor.pass.cpp:90:5: note: in instantiation of function template specialization 'test_has_trivial_destructor<bit_zero>' requested here
    test_has_trivial_destructor<bit_zero>();
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_destructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_destructor<const T>::value, "");
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_destructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_destructor<volatile T>::value, "");
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_trivial_destructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_trivial_destructor<const volatile T>::value, "");
    ^
In file included from has_trivial_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
12 errors generated.
has_trivial_destructor.pass.cpp failed to compile
has_trivial_move_assign.pass.cpp:32:2: error: #error has_trivial_move_assign not implemented
#error has_trivial_move_assign not implemented
 ^
1 error generated.
has_trivial_move_assign.pass.cpp failed to compile
has_trivial_move_constructor.pass.cpp:32:2: error: #error has_trivial_move_constructor not implemented
#error has_trivial_move_constructor not implemented
 ^
1 error generated.
has_trivial_move_constructor.pass.cpp failed to compile
has_virtual_destructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_virtual_destructor<T>::value, "");
    ^
In file included from has_virtual_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_virtual_destructor.pass.cpp:89:5: note: in instantiation of function template specialization 'test_has_virtual_destructor<Abstract>' requested here
    test_has_virtual_destructor<Abstract>();
    ^
In file included from has_virtual_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_virtual_destructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_virtual_destructor<const T>::value, "");
    ^
In file included from has_virtual_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_virtual_destructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_virtual_destructor<volatile T>::value, "");
    ^
In file included from has_virtual_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_virtual_destructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_virtual_destructor<const volatile T>::value, "");
    ^
In file included from has_virtual_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_virtual_destructor.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_virtual_destructor<T>::value, "");
    ^
In file included from has_virtual_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
has_virtual_destructor.pass.cpp:90:5: note: in instantiation of function template specialization 'test_has_virtual_destructor<NotEmpty>' requested here
    test_has_virtual_destructor<NotEmpty>();
    ^
In file included from has_virtual_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_virtual_destructor.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_virtual_destructor<const T>::value, "");
    ^
In file included from has_virtual_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_virtual_destructor.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_virtual_destructor<volatile T>::value, "");
    ^
In file included from has_virtual_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
has_virtual_destructor.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::has_virtual_destructor<const volatile T>::value, "");
    ^
In file included from has_virtual_destructor.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
8 errors generated.
has_virtual_destructor.pass.cpp failed to compile
In file included from is_empty.pass.cpp:28:
../../../../../include/type_traits:686:7: error: unions cannot be base classes
    : public _Tp
      ^~~~~~~~~~
../../../../../include/type_traits:697:56: note: in instantiation of template class 'std::__is_empty1<Union>' requested here
struct __libcpp_empty : public integral_constant<bool, sizeof(__is_empty1<_Tp>) == sizeof(__is_empty2)> {};
                                                       ^
../../../../../include/type_traits:701:40: note: in instantiation of template class 'std::__libcpp_empty<Union, 1>' requested here
template <class _Tp> struct is_empty : public __libcpp_empty<_Tp> {};
                                       ^
is_empty.pass.cpp:42:5: note: in instantiation of template class 'std::is_empty<Union>' requested here
    static_assert(!std::is_empty<T>::value, "");
    ^
is_empty.pass.cpp:42:20: note: instantiated from:
    static_assert(!std::is_empty<T>::value, "");
                   ^
is_empty.pass.cpp:74:5: note: in instantiation of function template specialization 'test_is_not_empty<Union>' requested here
    test_is_not_empty<Union>();
    ^
In file included from is_empty.pass.cpp:28:
../../../../../include/type_traits:686:7: error: unions cannot be base classes
    : public _Tp
      ^~~~~~~~~~
../../../../../include/type_traits:697:56: note: in instantiation of template class 'std::__is_empty1<Union const>' requested here
struct __libcpp_empty : public integral_constant<bool, sizeof(__is_empty1<_Tp>) == sizeof(__is_empty2)> {};
                                                       ^
../../../../../include/type_traits:701:40: note: in instantiation of template class 'std::__libcpp_empty<Union const, 1>' requested here
template <class _Tp> struct is_empty : public __libcpp_empty<_Tp> {};
                                       ^
is_empty.pass.cpp:43:5: note: in instantiation of template class 'std::is_empty<Union const>' requested here
    static_assert(!std::is_empty<const T>::value, "");
    ^
is_empty.pass.cpp:43:20: note: instantiated from:
    static_assert(!std::is_empty<const T>::value, "");
                   ^
is_empty.pass.cpp:74:5: note: in instantiation of function template specialization 'test_is_not_empty<Union>' requested here
    test_is_not_empty<Union>();
    ^
In file included from is_empty.pass.cpp:28:
../../../../../include/type_traits:686:7: error: unions cannot be base classes
    : public _Tp
      ^~~~~~~~~~
../../../../../include/type_traits:697:56: note: in instantiation of template class 'std::__is_empty1<Union volatile>' requested here
struct __libcpp_empty : public integral_constant<bool, sizeof(__is_empty1<_Tp>) == sizeof(__is_empty2)> {};
                                                       ^
../../../../../include/type_traits:701:40: note: in instantiation of template class 'std::__libcpp_empty<Union volatile, 1>' requested here
template <class _Tp> struct is_empty : public __libcpp_empty<_Tp> {};
                                       ^
is_empty.pass.cpp:44:5: note: in instantiation of template class 'std::is_empty<Union volatile>' requested here
    static_assert(!std::is_empty<volatile T>::value, "");
    ^
is_empty.pass.cpp:44:20: note: instantiated from:
    static_assert(!std::is_empty<volatile T>::value, "");
                   ^
is_empty.pass.cpp:74:5: note: in instantiation of function template specialization 'test_is_not_empty<Union>' requested here
    test_is_not_empty<Union>();
    ^
In file included from is_empty.pass.cpp:28:
../../../../../include/type_traits:686:7: error: unions cannot be base classes
    : public _Tp
      ^~~~~~~~~~
../../../../../include/type_traits:697:56: note: in instantiation of template class 'std::__is_empty1<Union const volatile>' requested here
struct __libcpp_empty : public integral_constant<bool, sizeof(__is_empty1<_Tp>) == sizeof(__is_empty2)> {};
                                                       ^
../../../../../include/type_traits:701:40: note: in instantiation of template class 'std::__libcpp_empty<Union const volatile, 1>' requested here
template <class _Tp> struct is_empty : public __libcpp_empty<_Tp> {};
                                       ^
is_empty.pass.cpp:45:5: note: in instantiation of template class 'std::is_empty<Union const volatile>' requested here
    static_assert(!std::is_empty<const volatile T>::value, "");
    ^
is_empty.pass.cpp:45:20: note: instantiated from:
    static_assert(!std::is_empty<const volatile T>::value, "");
                   ^
is_empty.pass.cpp:74:5: note: in instantiation of function template specialization 'test_is_not_empty<Union>' requested here
    test_is_not_empty<Union>();
    ^
In file included from is_empty.pass.cpp:28:
../../../../../include/type_traits:686:7: error: base class 'NotEmpty const volatile' has private destructor
    : public _Tp
      ^~~~~~~~~~
is_empty.pass.cpp:54:13: note: declared private here
    virtual ~NotEmpty();
            ^
In file included from is_empty.pass.cpp:28:
../../../../../include/type_traits:686:7: error: base class 'NotEmpty volatile' has private destructor
    : public _Tp
      ^~~~~~~~~~
is_empty.pass.cpp:54:13: note: declared private here
    virtual ~NotEmpty();
            ^
In file included from is_empty.pass.cpp:28:
../../../../../include/type_traits:686:7: error: base class 'NotEmpty const' has private destructor
    : public _Tp
      ^~~~~~~~~~
is_empty.pass.cpp:54:13: note: declared private here
    virtual ~NotEmpty();
            ^
In file included from is_empty.pass.cpp:28:
../../../../../include/type_traits:686:7: error: base class 'NotEmpty' has private destructor
    : public _Tp
      ^~~~~~~~~~
is_empty.pass.cpp:54:13: note: declared private here
    virtual ~NotEmpty();
            ^
8 errors generated.
is_empty.pass.cpp failed to compile
is_literal_type.pass.cpp:32:5: error: no member named 'is_literal_type' in namespace 'std'
    static_assert( std::is_literal_type<int>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_literal_type.pass.cpp:32:25: note: instantiated from:
    static_assert( std::is_literal_type<int>::value, "");
                   ~~~~~^
is_literal_type.pass.cpp:32:5: error: type name requires a specifier or qualifier
    static_assert( std::is_literal_type<int>::value, "");
    ^
In file included from is_literal_type.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_literal_type.pass.cpp:32:5: error: C++ requires a type specifier for all declarations
    static_assert( std::is_literal_type<int>::value, "");
    ^
In file included from is_literal_type.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_literal_type.pass.cpp:33:5: error: no member named 'is_literal_type' in namespace 'std'
    static_assert( std::is_literal_type<const int>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_literal_type.pass.cpp:33:25: note: instantiated from:
    static_assert( std::is_literal_type<const int>::value, "");
                   ~~~~~^
is_literal_type.pass.cpp:33:5: error: type name requires a specifier or qualifier
    static_assert( std::is_literal_type<const int>::value, "");
    ^
In file included from is_literal_type.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_literal_type.pass.cpp:33:5: error: C++ requires a type specifier for all declarations
    static_assert( std::is_literal_type<const int>::value, "");
    ^
In file included from is_literal_type.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_literal_type.pass.cpp:34:5: error: no member named 'is_literal_type' in namespace 'std'
    static_assert(!std::is_literal_type<int&>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_literal_type.pass.cpp:34:25: note: instantiated from:
    static_assert(!std::is_literal_type<int&>::value, "");
                   ~~~~~^
is_literal_type.pass.cpp:34:5: error: type name requires a specifier or qualifier
    static_assert(!std::is_literal_type<int&>::value, "");
    ^
In file included from is_literal_type.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_literal_type.pass.cpp:34:5: error: C++ requires a type specifier for all declarations
    static_assert(!std::is_literal_type<int&>::value, "");
    ^
In file included from is_literal_type.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_literal_type.pass.cpp:35:5: error: no member named 'is_literal_type' in namespace 'std'
    static_assert(!std::is_literal_type<volatile int&>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_literal_type.pass.cpp:35:25: note: instantiated from:
    static_assert(!std::is_literal_type<volatile int&>::value, "");
                   ~~~~~^
is_literal_type.pass.cpp:35:5: error: type name requires a specifier or qualifier
    static_assert(!std::is_literal_type<volatile int&>::value, "");
    ^
In file included from is_literal_type.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_literal_type.pass.cpp:35:5: error: C++ requires a type specifier for all declarations
    static_assert(!std::is_literal_type<volatile int&>::value, "");
    ^
In file included from is_literal_type.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
12 errors generated.
is_literal_type.pass.cpp failed to compile
is_pod.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_pod<const T>::value, "");
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
is_pod.pass.cpp:60:5: note: in instantiation of function template specialization 'test_is_pod<int>' requested here
    test_is_pod<int>();
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
is_pod.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_pod<const volatile T>::value, "");
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
is_pod.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_pod<const T>::value, "");
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
is_pod.pass.cpp:61:5: note: in instantiation of function template specialization 'test_is_pod<double>' requested here
    test_is_pod<double>();
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
is_pod.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_pod<const volatile T>::value, "");
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
is_pod.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_pod<const T>::value, "");
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
is_pod.pass.cpp:62:5: note: in instantiation of function template specialization 'test_is_pod<int *>' requested here
    test_is_pod<int*>();
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
is_pod.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_pod<const volatile T>::value, "");
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
is_pod.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_pod<const T>::value, "");
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
is_pod.pass.cpp:63:5: note: in instantiation of function template specialization 'test_is_pod<int const *>' requested here
    test_is_pod<const int*>();
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
is_pod.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_pod<const volatile T>::value, "");
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
is_pod.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_pod<const T>::value, "");
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
is_pod.pass.cpp:64:5: note: in instantiation of function template specialization 'test_is_pod<char [3]>' requested here
    test_is_pod<char[3]>();
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
is_pod.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_pod<const volatile T>::value, "");
    ^
In file included from is_pod.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
10 errors generated.
is_pod.pass.cpp failed to compile
In file included from is_polymorphic.pass.cpp:28:
../../../../../include/type_traits:705:49: error: unions cannot be base classes
template <class _Tp> struct __is_polymorphic1 : public _Tp {};
                                                ^~~~~~~~~~
../../../../../include/type_traits:710:38: note: in instantiation of template class 'std::__is_polymorphic1<Union>' requested here
    : public integral_constant<bool, sizeof(__is_polymorphic1<_Tp>) == sizeof(__is_polymorphic2<_Tp>)> {};
                                     ^
../../../../../include/type_traits:714:46: note: in instantiation of template class 'std::__libcpp_polymorphic<Union, 1>' requested here
template <class _Tp> struct is_polymorphic : public __libcpp_polymorphic<_Tp> {};
                                             ^
is_polymorphic.pass.cpp:42:5: note: in instantiation of template class 'std::is_polymorphic<Union>' requested here
    static_assert(!std::is_polymorphic<T>::value, "");
    ^
is_polymorphic.pass.cpp:42:20: note: instantiated from:
    static_assert(!std::is_polymorphic<T>::value, "");
                   ^
is_polymorphic.pass.cpp:79:5: note: in instantiation of function template specialization 'test_is_not_polymorphic<Union>' requested here
    test_is_not_polymorphic<Union>();
    ^
In file included from is_polymorphic.pass.cpp:28:
../../../../../include/type_traits:705:49: error: unions cannot be base classes
template <class _Tp> struct __is_polymorphic1 : public _Tp {};
                                                ^~~~~~~~~~
../../../../../include/type_traits:710:38: note: in instantiation of template class 'std::__is_polymorphic1<Union const>' requested here
    : public integral_constant<bool, sizeof(__is_polymorphic1<_Tp>) == sizeof(__is_polymorphic2<_Tp>)> {};
                                     ^
../../../../../include/type_traits:714:46: note: in instantiation of template class 'std::__libcpp_polymorphic<Union const, 1>' requested here
template <class _Tp> struct is_polymorphic : public __libcpp_polymorphic<_Tp> {};
                                             ^
is_polymorphic.pass.cpp:43:5: note: in instantiation of template class 'std::is_polymorphic<Union const>' requested here
    static_assert(!std::is_polymorphic<const T>::value, "");
    ^
is_polymorphic.pass.cpp:43:20: note: instantiated from:
    static_assert(!std::is_polymorphic<const T>::value, "");
                   ^
is_polymorphic.pass.cpp:79:5: note: in instantiation of function template specialization 'test_is_not_polymorphic<Union>' requested here
    test_is_not_polymorphic<Union>();
    ^
In file included from is_polymorphic.pass.cpp:28:
../../../../../include/type_traits:705:49: error: unions cannot be base classes
template <class _Tp> struct __is_polymorphic1 : public _Tp {};
                                                ^~~~~~~~~~
../../../../../include/type_traits:710:38: note: in instantiation of template class 'std::__is_polymorphic1<Union volatile>' requested here
    : public integral_constant<bool, sizeof(__is_polymorphic1<_Tp>) == sizeof(__is_polymorphic2<_Tp>)> {};
                                     ^
../../../../../include/type_traits:714:46: note: in instantiation of template class 'std::__libcpp_polymorphic<Union volatile, 1>' requested here
template <class _Tp> struct is_polymorphic : public __libcpp_polymorphic<_Tp> {};
                                             ^
is_polymorphic.pass.cpp:44:5: note: in instantiation of template class 'std::is_polymorphic<Union volatile>' requested here
    static_assert(!std::is_polymorphic<volatile T>::value, "");
    ^
is_polymorphic.pass.cpp:44:20: note: instantiated from:
    static_assert(!std::is_polymorphic<volatile T>::value, "");
                   ^
is_polymorphic.pass.cpp:79:5: note: in instantiation of function template specialization 'test_is_not_polymorphic<Union>' requested here
    test_is_not_polymorphic<Union>();
    ^
In file included from is_polymorphic.pass.cpp:28:
../../../../../include/type_traits:705:49: error: unions cannot be base classes
template <class _Tp> struct __is_polymorphic1 : public _Tp {};
                                                ^~~~~~~~~~
../../../../../include/type_traits:710:38: note: in instantiation of template class 'std::__is_polymorphic1<Union const volatile>' requested here
    : public integral_constant<bool, sizeof(__is_polymorphic1<_Tp>) == sizeof(__is_polymorphic2<_Tp>)> {};
                                     ^
../../../../../include/type_traits:714:46: note: in instantiation of template class 'std::__libcpp_polymorphic<Union const volatile, 1>' requested here
template <class _Tp> struct is_polymorphic : public __libcpp_polymorphic<_Tp> {};
                                             ^
is_polymorphic.pass.cpp:45:5: note: in instantiation of template class 'std::is_polymorphic<Union const volatile>' requested here
    static_assert(!std::is_polymorphic<const volatile T>::value, "");
    ^
is_polymorphic.pass.cpp:45:20: note: instantiated from:
    static_assert(!std::is_polymorphic<const volatile T>::value, "");
                   ^
is_polymorphic.pass.cpp:79:5: note: in instantiation of function template specialization 'test_is_not_polymorphic<Union>' requested here
    test_is_not_polymorphic<Union>();
    ^
In file included from is_polymorphic.pass.cpp:28:
../../../../../include/type_traits:705:49: error: base class 'Abstract const volatile' has private destructor
template <class _Tp> struct __is_polymorphic1 : public _Tp {};
                                                ^~~~~~~~~~
is_polymorphic.pass.cpp:66:13: note: declared private here
    virtual ~Abstract() = 0;
            ^
In file included from is_polymorphic.pass.cpp:28:
../../../../../include/type_traits:705:49: error: base class 'Abstract volatile' has private destructor
template <class _Tp> struct __is_polymorphic1 : public _Tp {};
                                                ^~~~~~~~~~
is_polymorphic.pass.cpp:66:13: note: declared private here
    virtual ~Abstract() = 0;
            ^
In file included from is_polymorphic.pass.cpp:28:
../../../../../include/type_traits:705:49: error: base class 'Abstract const' has private destructor
template <class _Tp> struct __is_polymorphic1 : public _Tp {};
                                                ^~~~~~~~~~
is_polymorphic.pass.cpp:66:13: note: declared private here
    virtual ~Abstract() = 0;
            ^
In file included from is_polymorphic.pass.cpp:28:
../../../../../include/type_traits:705:49: error: base class 'Abstract' has private destructor
template <class _Tp> struct __is_polymorphic1 : public _Tp {};
                                                ^~~~~~~~~~
is_polymorphic.pass.cpp:66:13: note: declared private here
    virtual ~Abstract() = 0;
            ^
In file included from is_polymorphic.pass.cpp:28:
../../../../../include/type_traits:705:49: error: base class 'NotEmpty const volatile' has private destructor
template <class _Tp> struct __is_polymorphic1 : public _Tp {};
                                                ^~~~~~~~~~
is_polymorphic.pass.cpp:54:13: note: declared private here
    virtual ~NotEmpty();
            ^
In file included from is_polymorphic.pass.cpp:28:
../../../../../include/type_traits:705:49: error: base class 'NotEmpty volatile' has private destructor
template <class _Tp> struct __is_polymorphic1 : public _Tp {};
                                                ^~~~~~~~~~
is_polymorphic.pass.cpp:54:13: note: declared private here
    virtual ~NotEmpty();
            ^
In file included from is_polymorphic.pass.cpp:28:
../../../../../include/type_traits:705:49: error: base class 'NotEmpty const' has private destructor
template <class _Tp> struct __is_polymorphic1 : public _Tp {};
                                                ^~~~~~~~~~
is_polymorphic.pass.cpp:54:13: note: declared private here
    virtual ~NotEmpty();
            ^
In file included from is_polymorphic.pass.cpp:28:
../../../../../include/type_traits:705:49: error: base class 'NotEmpty' has private destructor
template <class _Tp> struct __is_polymorphic1 : public _Tp {};
                                                ^~~~~~~~~~
is_polymorphic.pass.cpp:54:13: note: declared private here
    virtual ~NotEmpty();
            ^
12 errors generated.
is_polymorphic.pass.cpp failed to compile
is_standard_layout.pass.cpp:32:5: error: no member named 'is_standard_layout' in namespace 'std'
    static_assert( std::is_standard_layout<int>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_standard_layout.pass.cpp:32:25: note: instantiated from:
    static_assert( std::is_standard_layout<int>::value, "");
                   ~~~~~^
is_standard_layout.pass.cpp:32:5: error: type name requires a specifier or qualifier
    static_assert( std::is_standard_layout<int>::value, "");
    ^
In file included from is_standard_layout.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_standard_layout.pass.cpp:32:5: error: C++ requires a type specifier for all declarations
    static_assert( std::is_standard_layout<int>::value, "");
    ^
In file included from is_standard_layout.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_standard_layout.pass.cpp:33:5: error: no member named 'is_standard_layout' in namespace 'std'
    static_assert(!std::is_standard_layout<int&>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_standard_layout.pass.cpp:33:25: note: instantiated from:
    static_assert(!std::is_standard_layout<int&>::value, "");
                   ~~~~~^
is_standard_layout.pass.cpp:33:5: error: type name requires a specifier or qualifier
    static_assert(!std::is_standard_layout<int&>::value, "");
    ^
In file included from is_standard_layout.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_standard_layout.pass.cpp:33:5: error: C++ requires a type specifier for all declarations
    static_assert(!std::is_standard_layout<int&>::value, "");
    ^
In file included from is_standard_layout.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_standard_layout.pass.cpp:34:5: error: no member named 'is_standard_layout' in namespace 'std'
    static_assert(!std::is_standard_layout<volatile int&>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_standard_layout.pass.cpp:34:25: note: instantiated from:
    static_assert(!std::is_standard_layout<volatile int&>::value, "");
                   ~~~~~^
is_standard_layout.pass.cpp:34:5: error: type name requires a specifier or qualifier
    static_assert(!std::is_standard_layout<volatile int&>::value, "");
    ^
In file included from is_standard_layout.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_standard_layout.pass.cpp:34:5: error: C++ requires a type specifier for all declarations
    static_assert(!std::is_standard_layout<volatile int&>::value, "");
    ^
In file included from is_standard_layout.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
9 errors generated.
is_standard_layout.pass.cpp failed to compile
is_trivial.pass.cpp:32:5: error: no member named 'is_trivial' in namespace 'std'
    static_assert( std::is_trivial<int>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_trivial.pass.cpp:32:25: note: instantiated from:
    static_assert( std::is_trivial<int>::value, "");
                   ~~~~~^
is_trivial.pass.cpp:32:5: error: type name requires a specifier or qualifier
    static_assert( std::is_trivial<int>::value, "");
    ^
In file included from is_trivial.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivial.pass.cpp:32:5: error: C++ requires a type specifier for all declarations
    static_assert( std::is_trivial<int>::value, "");
    ^
In file included from is_trivial.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivial.pass.cpp:33:5: error: no member named 'is_trivial' in namespace 'std'
    static_assert(!std::is_trivial<int&>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_trivial.pass.cpp:33:25: note: instantiated from:
    static_assert(!std::is_trivial<int&>::value, "");
                   ~~~~~^
is_trivial.pass.cpp:33:5: error: type name requires a specifier or qualifier
    static_assert(!std::is_trivial<int&>::value, "");
    ^
In file included from is_trivial.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivial.pass.cpp:33:5: error: C++ requires a type specifier for all declarations
    static_assert(!std::is_trivial<int&>::value, "");
    ^
In file included from is_trivial.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivial.pass.cpp:34:5: error: no member named 'is_trivial' in namespace 'std'
    static_assert(!std::is_trivial<volatile int&>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_trivial.pass.cpp:34:25: note: instantiated from:
    static_assert(!std::is_trivial<volatile int&>::value, "");
                   ~~~~~^
is_trivial.pass.cpp:34:5: error: type name requires a specifier or qualifier
    static_assert(!std::is_trivial<volatile int&>::value, "");
    ^
In file included from is_trivial.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivial.pass.cpp:34:5: error: C++ requires a type specifier for all declarations
    static_assert(!std::is_trivial<volatile int&>::value, "");
    ^
In file included from is_trivial.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
9 errors generated.
is_trivial.pass.cpp failed to compile
is_trivialially_copyable.pass.cpp:44:5: error: no member named 'is_trivially_copyable' in namespace 'std'
    static_assert( std::is_trivially_copyable<int>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_trivialially_copyable.pass.cpp:44:25: note: instantiated from:
    static_assert( std::is_trivially_copyable<int>::value, "");
                   ~~~~~^
is_trivialially_copyable.pass.cpp:44:5: error: type name requires a specifier or qualifier
    static_assert( std::is_trivially_copyable<int>::value, "");
    ^
In file included from is_trivialially_copyable.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivialially_copyable.pass.cpp:44:5: error: C++ requires a type specifier for all declarations
    static_assert( std::is_trivially_copyable<int>::value, "");
    ^
In file included from is_trivialially_copyable.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivialially_copyable.pass.cpp:45:5: error: no member named 'is_trivially_copyable' in namespace 'std'
    static_assert( std::is_trivially_copyable<const int>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_trivialially_copyable.pass.cpp:45:25: note: instantiated from:
    static_assert( std::is_trivially_copyable<const int>::value, "");
                   ~~~~~^
is_trivialially_copyable.pass.cpp:45:5: error: type name requires a specifier or qualifier
    static_assert( std::is_trivially_copyable<const int>::value, "");
    ^
In file included from is_trivialially_copyable.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivialially_copyable.pass.cpp:45:5: error: C++ requires a type specifier for all declarations
    static_assert( std::is_trivially_copyable<const int>::value, "");
    ^
In file included from is_trivialially_copyable.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivialially_copyable.pass.cpp:46:5: error: no member named 'is_trivially_copyable' in namespace 'std'
    static_assert(!std::is_trivially_copyable<int&>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_trivialially_copyable.pass.cpp:46:25: note: instantiated from:
    static_assert(!std::is_trivially_copyable<int&>::value, "");
                   ~~~~~^
is_trivialially_copyable.pass.cpp:46:5: error: type name requires a specifier or qualifier
    static_assert(!std::is_trivially_copyable<int&>::value, "");
    ^
In file included from is_trivialially_copyable.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivialially_copyable.pass.cpp:46:5: error: C++ requires a type specifier for all declarations
    static_assert(!std::is_trivially_copyable<int&>::value, "");
    ^
In file included from is_trivialially_copyable.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivialially_copyable.pass.cpp:47:5: error: no member named 'is_trivially_copyable' in namespace 'std'
    static_assert( std::is_trivially_copyable<A>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_trivialially_copyable.pass.cpp:47:25: note: instantiated from:
    static_assert( std::is_trivially_copyable<A>::value, "");
                   ~~~~~^
is_trivialially_copyable.pass.cpp:47:5: error: type name requires a specifier or qualifier
    static_assert( std::is_trivially_copyable<A>::value, "");
    ^
In file included from is_trivialially_copyable.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivialially_copyable.pass.cpp:47:5: error: C++ requires a type specifier for all declarations
    static_assert( std::is_trivially_copyable<A>::value, "");
    ^
In file included from is_trivialially_copyable.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivialially_copyable.pass.cpp:48:5: error: no member named 'is_trivially_copyable' in namespace 'std'
    static_assert( std::is_trivially_copyable<const A>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_trivialially_copyable.pass.cpp:48:25: note: instantiated from:
    static_assert( std::is_trivially_copyable<const A>::value, "");
                   ~~~~~^
is_trivialially_copyable.pass.cpp:48:5: error: type name requires a specifier or qualifier
    static_assert( std::is_trivially_copyable<const A>::value, "");
    ^
In file included from is_trivialially_copyable.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivialially_copyable.pass.cpp:48:5: error: C++ requires a type specifier for all declarations
    static_assert( std::is_trivially_copyable<const A>::value, "");
    ^
In file included from is_trivialially_copyable.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivialially_copyable.pass.cpp:49:5: error: no member named 'is_trivially_copyable' in namespace 'std'
    static_assert(!std::is_trivially_copyable<const A&>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_trivialially_copyable.pass.cpp:49:25: note: instantiated from:
    static_assert(!std::is_trivially_copyable<const A&>::value, "");
                   ~~~~~^
is_trivialially_copyable.pass.cpp:49:5: error: type name requires a specifier or qualifier
    static_assert(!std::is_trivially_copyable<const A&>::value, "");
    ^
In file included from is_trivialially_copyable.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivialially_copyable.pass.cpp:49:5: error: C++ requires a type specifier for all declarations
    static_assert(!std::is_trivially_copyable<const A&>::value, "");
    ^
In file included from is_trivialially_copyable.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
is_trivialially_copyable.pass.cpp:50:5: error: no member named 'is_trivially_copyable' in namespace 'std'
    static_assert(!std::is_trivially_copyable<B>::value, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is_trivialially_copyable.pass.cpp:50:25: note: instantiated from:
    static_assert(!std::is_trivially_copyable<B>::value, "");
                   ~~~~~^
fatal error: too many errors emitted, stopping now
20 errors generated.
is_trivialially_copyable.pass.cpp failed to compile
failed 24 tests in /test/utilities/meta/meta.unary/meta.unary.prop
passed 10 tests in /test/utilities/meta/meta.unary/meta.unary.prop
passed 2 tests in /test/utilities/ratio
passed 8 tests in /test/utilities/ratio/ratio.arithmetic
passed 6 tests in /test/utilities/ratio/ratio.comparison
passed 4 tests in /test/utilities/ratio/ratio.ratio
passed 1 tests in /test/utilities/ratio/ratio.si
passed 2 tests in /test/utilities/template.bitset
passed 4 tests in /test/utilities/template.bitset/bitset.cons
passed 1 tests in /test/utilities/template.bitset/bitset.hash
passed 26 tests in /test/utilities/template.bitset/bitset.members
passed 5 tests in /test/utilities/template.bitset/bitset.operators
passed 7 tests in /test/utilities/time
passed 1 tests in /test/utilities/time/time.clock
passed 2 tests in /test/utilities/time/time.clock/time.clock.hires
passed 2 tests in /test/utilities/time/time.clock/time.clock.monotonic
passed 5 tests in /test/utilities/time/time.clock/time.clock.system
passed 1 tests in /test/utilities/time/time.clock.req
passed 5 tests in /test/utilities/time/time.duration
passed 12 tests in /test/utilities/time/time.duration/time.duration.arithmetic
passed 2 tests in /test/utilities/time/time.duration/time.duration.cast
passed 2 tests in /test/utilities/time/time.duration/time.duration.comparisons
passed 11 tests in /test/utilities/time/time.duration/time.duration.cons
passed 11 tests in /test/utilities/time/time.duration/time.duration.nonmember
passed 1 tests in /test/utilities/time/time.duration/time.duration.observer
passed 3 tests in /test/utilities/time/time.duration/time.duration.special
passed 2 tests in /test/utilities/time/time.point
passed 2 tests in /test/utilities/time/time.point/time.point.arithmetic
passed 2 tests in /test/utilities/time/time.point/time.point.cast
passed 4 tests in /test/utilities/time/time.point/time.point.comparisons
passed 5 tests in /test/utilities/time/time.point/time.point.cons
passed 3 tests in /test/utilities/time/time.point/time.point.nonmember
passed 1 tests in /test/utilities/time/time.point/time.point.observer
passed 2 tests in /test/utilities/time/time.point/time.point.special
passed 1 tests in /test/utilities/time/time.traits
passed 3 tests in /test/utilities/time/time.traits/time.traits.duration_values
passed 1 tests in /test/utilities/time/time.traits/time.traits.is_fp
passed 2 tests in /test/utilities/time/time.traits/time.traits.specializations
passed 1 tests in /test/utilities/tuple
passed 1 tests in /test/utilities/tuple/tuple.general
empty_member.pass.cpp:39:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, A> T;
                ~~~~~^
empty_member.pass.cpp:39:27: error: expected unqualified-id
        typedef std::tuple<int, A> T;
                          ^
empty_member.pass.cpp:40:9: error: use of undeclared identifier 'T'
        static_assert((sizeof(T) == sizeof(int)), "");
        ^
empty_member.pass.cpp:40:31: note: instantiated from:
        static_assert((sizeof(T) == sizeof(int)), "");
                              ^
empty_member.pass.cpp:40:9: error: type name requires a specifier or qualifier
        static_assert((sizeof(T) == sizeof(int)), "");
        ^
In file included from empty_member.pass.cpp:30:
In file included from ../../../../include/tuple:133:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
empty_member.pass.cpp:40:9: error: C++ requires a type specifier for all declarations
        static_assert((sizeof(T) == sizeof(int)), "");
        ^
In file included from empty_member.pass.cpp:30:
In file included from ../../../../include/tuple:133:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
empty_member.pass.cpp:43:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<A, int> T;
                ~~~~~^
empty_member.pass.cpp:43:27: error: expected unqualified-id
        typedef std::tuple<A, int> T;
                          ^
empty_member.pass.cpp:44:9: error: use of undeclared identifier 'T'
        static_assert((sizeof(T) == sizeof(int)), "");
        ^
empty_member.pass.cpp:44:31: note: instantiated from:
        static_assert((sizeof(T) == sizeof(int)), "");
                              ^
empty_member.pass.cpp:44:9: error: type name requires a specifier or qualifier
        static_assert((sizeof(T) == sizeof(int)), "");
        ^
In file included from empty_member.pass.cpp:30:
In file included from ../../../../include/tuple:133:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
empty_member.pass.cpp:44:9: error: C++ requires a type specifier for all declarations
        static_assert((sizeof(T) == sizeof(int)), "");
        ^
In file included from empty_member.pass.cpp:30:
In file included from ../../../../include/tuple:133:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
empty_member.pass.cpp:47:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<A, int, B> T;
                ~~~~~^
empty_member.pass.cpp:47:27: error: expected unqualified-id
        typedef std::tuple<A, int, B> T;
                          ^
empty_member.pass.cpp:48:9: error: use of undeclared identifier 'T'
        static_assert((sizeof(T) == sizeof(int)), "");
        ^
empty_member.pass.cpp:48:31: note: instantiated from:
        static_assert((sizeof(T) == sizeof(int)), "");
                              ^
empty_member.pass.cpp:48:9: error: type name requires a specifier or qualifier
        static_assert((sizeof(T) == sizeof(int)), "");
        ^
In file included from empty_member.pass.cpp:30:
In file included from ../../../../include/tuple:133:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
empty_member.pass.cpp:48:9: error: C++ requires a type specifier for all declarations
        static_assert((sizeof(T) == sizeof(int)), "");
        ^
In file included from empty_member.pass.cpp:30:
In file included from ../../../../include/tuple:133:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
empty_member.pass.cpp:51:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<A, B, int> T;
                ~~~~~^
empty_member.pass.cpp:51:27: error: expected unqualified-id
        typedef std::tuple<A, B, int> T;
                          ^
empty_member.pass.cpp:52:9: error: use of undeclared identifier 'T'
        static_assert((sizeof(T) == sizeof(int)), "");
        ^
empty_member.pass.cpp:52:31: note: instantiated from:
        static_assert((sizeof(T) == sizeof(int)), "");
                              ^
empty_member.pass.cpp:52:9: error: type name requires a specifier or qualifier
        static_assert((sizeof(T) == sizeof(int)), "");
        ^
In file included from empty_member.pass.cpp:30:
In file included from ../../../../include/tuple:133:
../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
fatal error: too many errors emitted, stopping now
20 errors generated.
empty_member.pass.cpp failed to compile
failed 1 tests in /test/utilities/tuple/tuple.tuple
const_pair.pass.cpp:39:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, short> T1;
                ~~~~~^
const_pair.pass.cpp:39:27: error: expected unqualified-id
        typedef std::tuple<int, short> T1;
                          ^
const_pair.pass.cpp:41:9: error: use of undeclared identifier 'T1'
        T1 t1;
        ^
const_pair.pass.cpp:42:9: error: use of undeclared identifier 't1'
        t1 = t0;
        ^
const_pair.pass.cpp:43:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t1) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
const_pair.pass.cpp:43:21: note: instantiated from:
        assert(std::get<0>(t1) == 2);
               ~~~~~^
const_pair.pass.cpp:44:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t1) == short('a'));
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const_pair.pass.cpp:44:21: note: instantiated from:
        assert(std::get<1>(t1) == short('a'));
               ~~~~~^
6 errors generated.
const_pair.pass.cpp failed to compile
convert_copy.pass.cpp:51:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double> T0;
                ~~~~~^
convert_copy.pass.cpp:51:27: error: expected unqualified-id
        typedef std::tuple<double> T0;
                          ^
convert_copy.pass.cpp:52:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int> T1;
                ~~~~~^
convert_copy.pass.cpp:52:27: error: expected unqualified-id
        typedef std::tuple<int> T1;
                          ^
convert_copy.pass.cpp:53:9: error: use of undeclared identifier 'T0'
        T0 t0(2.5);
        ^
convert_copy.pass.cpp:54:9: error: use of undeclared identifier 'T1'
        T1 t1;
        ^
convert_copy.pass.cpp:55:9: error: use of undeclared identifier 't1'
        t1 = t0;
        ^
convert_copy.pass.cpp:56:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t1) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
convert_copy.pass.cpp:56:21: note: instantiated from:
        assert(std::get<0>(t1) == 2);
               ~~~~~^
convert_copy.pass.cpp:59:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double, char> T0;
                ~~~~~^
convert_copy.pass.cpp:59:27: error: expected unqualified-id
        typedef std::tuple<double, char> T0;
                          ^
convert_copy.pass.cpp:60:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, int> T1;
                ~~~~~^
convert_copy.pass.cpp:60:27: error: expected unqualified-id
        typedef std::tuple<int, int> T1;
                          ^
convert_copy.pass.cpp:61:9: error: use of undeclared identifier 'T0'
        T0 t0(2.5, 'a');
        ^
convert_copy.pass.cpp:62:9: error: use of undeclared identifier 'T1'
        T1 t1;
        ^
convert_copy.pass.cpp:63:9: error: use of undeclared identifier 't1'
        t1 = t0;
        ^
convert_copy.pass.cpp:64:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t1) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
convert_copy.pass.cpp:64:21: note: instantiated from:
        assert(std::get<0>(t1) == 2);
               ~~~~~^
convert_copy.pass.cpp:65:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t1) == int('a'));
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
convert_copy.pass.cpp:65:21: note: instantiated from:
        assert(std::get<1>(t1) == int('a'));
               ~~~~~^
convert_copy.pass.cpp:68:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double, char, D> T0;
                ~~~~~^
convert_copy.pass.cpp:68:27: error: expected unqualified-id
        typedef std::tuple<double, char, D> T0;
                          ^
fatal error: too many errors emitted, stopping now
20 errors generated.
convert_copy.pass.cpp failed to compile
convert_move.pass.cpp:54:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double> T0;
                ~~~~~^
convert_move.pass.cpp:54:27: error: expected unqualified-id
        typedef std::tuple<double> T0;
                          ^
convert_move.pass.cpp:55:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int> T1;
                ~~~~~^
convert_move.pass.cpp:55:27: error: expected unqualified-id
        typedef std::tuple<int> T1;
                          ^
convert_move.pass.cpp:56:9: error: use of undeclared identifier 'T0'
        T0 t0(2.5);
        ^
convert_move.pass.cpp:57:9: error: use of undeclared identifier 'T1'
        T1 t1;
        ^
convert_move.pass.cpp:58:9: error: use of undeclared identifier 't1'
        t1 = std::move(t0);
        ^
convert_move.pass.cpp:59:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t1) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
convert_move.pass.cpp:59:21: note: instantiated from:
        assert(std::get<0>(t1) == 2);
               ~~~~~^
convert_move.pass.cpp:62:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double, char> T0;
                ~~~~~^
convert_move.pass.cpp:62:27: error: expected unqualified-id
        typedef std::tuple<double, char> T0;
                          ^
convert_move.pass.cpp:63:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, int> T1;
                ~~~~~^
convert_move.pass.cpp:63:27: error: expected unqualified-id
        typedef std::tuple<int, int> T1;
                          ^
convert_move.pass.cpp:64:9: error: use of undeclared identifier 'T0'
        T0 t0(2.5, 'a');
        ^
convert_move.pass.cpp:65:9: error: use of undeclared identifier 'T1'
        T1 t1;
        ^
convert_move.pass.cpp:66:9: error: use of undeclared identifier 't1'
        t1 = std::move(t0);
        ^
convert_move.pass.cpp:67:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t1) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
convert_move.pass.cpp:67:21: note: instantiated from:
        assert(std::get<0>(t1) == 2);
               ~~~~~^
convert_move.pass.cpp:68:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t1) == int('a'));
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
convert_move.pass.cpp:68:21: note: instantiated from:
        assert(std::get<1>(t1) == int('a'));
               ~~~~~^
convert_move.pass.cpp:71:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double, char, D> T0;
                ~~~~~^
convert_move.pass.cpp:71:27: error: expected unqualified-id
        typedef std::tuple<double, char, D> T0;
                          ^
fatal error: too many errors emitted, stopping now
20 errors generated.
convert_move.pass.cpp failed to compile
copy.pass.cpp:37:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<> T;
                ~~~~~^
copy.pass.cpp:37:27: error: expected unqualified-id
        typedef std::tuple<> T;
                          ^
copy.pass.cpp:38:9: error: use of undeclared identifier 'T'
        T t0;
        ^
copy.pass.cpp:39:9: error: use of undeclared identifier 'T'
        T t;
        ^
copy.pass.cpp:40:9: error: use of undeclared identifier 't'
        t = t0;
        ^
copy.pass.cpp:43:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int> T;
                ~~~~~^
copy.pass.cpp:43:27: error: expected unqualified-id
        typedef std::tuple<int> T;
                          ^
copy.pass.cpp:44:9: error: use of undeclared identifier 'T'
        T t0(2);
        ^
copy.pass.cpp:45:9: error: use of undeclared identifier 'T'
        T t;
        ^
copy.pass.cpp:46:9: error: use of undeclared identifier 't'
        t = t0;
        ^
copy.pass.cpp:47:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
copy.pass.cpp:47:21: note: instantiated from:
        assert(std::get<0>(t) == 2);
               ~~~~~^
copy.pass.cpp:50:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, char> T;
                ~~~~~^
copy.pass.cpp:50:27: error: expected unqualified-id
        typedef std::tuple<int, char> T;
                          ^
copy.pass.cpp:51:9: error: use of undeclared identifier 'T'
        T t0(2, 'a');
        ^
copy.pass.cpp:52:9: error: use of undeclared identifier 'T'
        T t;
        ^
copy.pass.cpp:53:9: error: use of undeclared identifier 't'
        t = t0;
        ^
copy.pass.cpp:54:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
copy.pass.cpp:54:21: note: instantiated from:
        assert(std::get<0>(t) == 2);
               ~~~~~^
copy.pass.cpp:55:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == 'a');
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
copy.pass.cpp:55:21: note: instantiated from:
        assert(std::get<1>(t) == 'a');
               ~~~~~^
copy.pass.cpp:58:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, char, std::string> T;
                ~~~~~^
fatal error: too many errors emitted, stopping now
20 errors generated.
copy.pass.cpp failed to compile
move.pass.cpp:38:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<> T;
                ~~~~~^
move.pass.cpp:38:27: error: expected unqualified-id
        typedef std::tuple<> T;
                          ^
move.pass.cpp:39:9: error: use of undeclared identifier 'T'
        T t0;
        ^
move.pass.cpp:40:9: error: use of undeclared identifier 'T'
        T t;
        ^
move.pass.cpp:41:9: error: use of undeclared identifier 't'
        t = std::move(t0);
        ^
move.pass.cpp:44:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<MoveOnly> T;
                ~~~~~^
move.pass.cpp:44:27: error: expected unqualified-id
        typedef std::tuple<MoveOnly> T;
                          ^
move.pass.cpp:45:9: error: use of undeclared identifier 'T'
        T t0(MoveOnly(0));
        ^
move.pass.cpp:46:9: error: use of undeclared identifier 'T'
        T t;
        ^
move.pass.cpp:47:9: error: use of undeclared identifier 't'
        t = std::move(t0);
        ^
move.pass.cpp:48:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
move.pass.cpp:48:21: note: instantiated from:
        assert(std::get<0>(t) == 0);
               ~~~~~^
move.pass.cpp:51:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<MoveOnly, MoveOnly> T;
                ~~~~~^
move.pass.cpp:51:27: error: expected unqualified-id
        typedef std::tuple<MoveOnly, MoveOnly> T;
                          ^
move.pass.cpp:52:9: error: use of undeclared identifier 'T'
        T t0(MoveOnly(0), MoveOnly(1));
        ^
move.pass.cpp:53:9: error: use of undeclared identifier 'T'
        T t;
        ^
move.pass.cpp:54:9: error: use of undeclared identifier 't'
        t = std::move(t0);
        ^
move.pass.cpp:55:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
move.pass.cpp:55:21: note: instantiated from:
        assert(std::get<0>(t) == 0);
               ~~~~~^
move.pass.cpp:56:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == 1);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
move.pass.cpp:56:21: note: instantiated from:
        assert(std::get<1>(t) == 1);
               ~~~~~^
move.pass.cpp:59:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<MoveOnly, MoveOnly, MoveOnly> T;
                ~~~~~^
fatal error: too many errors emitted, stopping now
20 errors generated.
move.pass.cpp failed to compile
move_pair.pass.cpp:55:52: error: a space is required between consecutive right angle brackets (use '> >')
        typedef std::pair<double, std::unique_ptr<D>> T0;
                                                   ^~
                                                   > >
move_pair.pass.cpp:56:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, std::unique_ptr<B>> T1;
                ~~~~~^
move_pair.pass.cpp:56:27: error: expected unqualified-id
        typedef std::tuple<int, std::unique_ptr<B>> T1;
                          ^
move_pair.pass.cpp:57:20: error: no viable constructor copying parameter of type 'std::unique_ptr<D>'
        T0 t0(2.5, std::unique_ptr<D>(new D(3)));
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from move_pair.pass.cpp:31:
In file included from ../../../../../include/tuple:136:
../../../../../include/memory:2080:5: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<D>' to 'std::unique_ptr<D, std::default_delete<D> > &' for 1st argument
    unique_ptr(unique_ptr&);
    ^
move_pair.pass.cpp:58:9: error: use of undeclared identifier 'T1'
        T1 t1;
        ^
move_pair.pass.cpp:59:9: error: use of undeclared identifier 't1'
        t1 = std::move(t0);
        ^
move_pair.pass.cpp:60:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t1) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
move_pair.pass.cpp:60:21: note: instantiated from:
        assert(std::get<0>(t1) == 2);
               ~~~~~^
move_pair.pass.cpp:61:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t1)->id_ == 3);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
move_pair.pass.cpp:61:21: note: instantiated from:
        assert(std::get<1>(t1)->id_ == 3);
               ~~~~~^
In file included from move_pair.pass.cpp:31:
In file included from ../../../../../include/tuple:136:
In file included from ../../../../../include/memory:214:
../../../../../include/utility:230:23: error: no matching constructor for initialization of 'std::unique_ptr<D, std::default_delete<D> >'
        : first(__x), second(__y) {}
                      ^      ~~~
move_pair.pass.cpp:57:12: note: in instantiation of member function 'std::pair<double, std::unique_ptr<D, std::default_delete<D> > >::pair' requested here
        T0 t0(2.5, std::unique_ptr<D>(new D(3)));
           ^
In file included from move_pair.pass.cpp:31:
In file included from ../../../../../include/tuple:136:
../../../../../include/memory:2080:5: note: candidate constructor not viable: 1st argument ('std::unique_ptr<D, std::default_delete<D> > const') would lose const qualifier
    unique_ptr(unique_ptr&);
    ^
../../../../../include/memory:2099:31: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<D, std::default_delete<D> > const' to 'std::nullptr_t' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(nullptr_t)
                              ^
../../../../../include/memory:2105:40: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<D, std::default_delete<D> > const' to 'pointer' (aka 'D *') for 1st argument
    _LIBCPP_INLINE_VISIBILITY explicit unique_ptr(pointer __p)
                                       ^
../../../../../include/memory:2191:31: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<D, std::default_delete<D> > const' to '__rv<std::unique_ptr<D, std::default_delete<D> > >' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                              ^
../../../../../include/memory:2113:44: note: candidate template ignored: failed template argument deduction
        _LIBCPP_INLINE_VISIBILITY explicit unique_ptr(auto_ptr<_Up>& __p,
                                           ^
../../../../../include/memory:2093:31: note: candidate constructor not viable: requires 0 arguments, but 1 was provided
    _LIBCPP_INLINE_VISIBILITY unique_ptr()
                              ^
../../../../../include/memory:2202:31: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
    _LIBCPP_INLINE_VISIBILITY unique_ptr(pointer __p, deleter_type __d)
                              ^
9 errors generated.
move_pair.pass.cpp failed to compile
failed 6 tests in /test/utilities/tuple/tuple.tuple/tuple.assign
passed 1 tests in /test/utilities/tuple/tuple.tuple/tuple.assign
UTypes.pass.cpp:39:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<MoveOnly> t(MoveOnly(0));
        ~~~~~^
UTypes.pass.cpp:40:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
UTypes.pass.cpp:40:21: note: instantiated from:
        assert(std::get<0>(t) == 0);
               ~~~~~^
UTypes.pass.cpp:43:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<MoveOnly, MoveOnly> t(MoveOnly(0), MoveOnly(1));
        ~~~~~^
UTypes.pass.cpp:44:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
UTypes.pass.cpp:44:21: note: instantiated from:
        assert(std::get<0>(t) == 0);
               ~~~~~^
UTypes.pass.cpp:45:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == 1);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
UTypes.pass.cpp:45:21: note: instantiated from:
        assert(std::get<1>(t) == 1);
               ~~~~~^
UTypes.pass.cpp:48:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<MoveOnly, MoveOnly, MoveOnly> t(MoveOnly(0),
        ~~~~~^
UTypes.pass.cpp:51:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
UTypes.pass.cpp:51:21: note: instantiated from:
        assert(std::get<0>(t) == 0);
               ~~~~~^
UTypes.pass.cpp:52:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == 1);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
UTypes.pass.cpp:52:21: note: instantiated from:
        assert(std::get<1>(t) == 1);
               ~~~~~^
UTypes.pass.cpp:53:9: error: no member named 'get' in namespace 'std'
        assert(std::get<2>(t) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
UTypes.pass.cpp:53:21: note: instantiated from:
        assert(std::get<2>(t) == 2);
               ~~~~~^
UTypes.pass.cpp:57:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<MoveOnly, MoveOnly, MoveOnly> t(MoveOnly(0),
        ~~~~~^
UTypes.pass.cpp:59:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
UTypes.pass.cpp:59:21: note: instantiated from:
        assert(std::get<0>(t) == 0);
               ~~~~~^
UTypes.pass.cpp:60:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == 1);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
UTypes.pass.cpp:60:21: note: instantiated from:
        assert(std::get<1>(t) == 1);
               ~~~~~^
UTypes.pass.cpp:61:9: error: no member named 'get' in namespace 'std'
        assert(std::get<2>(t) == MoveOnly());
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
UTypes.pass.cpp:61:21: note: instantiated from:
        assert(std::get<2>(t) == MoveOnly());
               ~~~~~^
UTypes.pass.cpp:64:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<MoveOnly, MoveOnly, MoveOnly> t(MoveOnly(0));
        ~~~~~^
UTypes.pass.cpp:65:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
UTypes.pass.cpp:65:21: note: instantiated from:
        assert(std::get<0>(t) == 0);
               ~~~~~^
UTypes.pass.cpp:66:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == MoveOnly());
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
UTypes.pass.cpp:66:21: note: instantiated from:
        assert(std::get<1>(t) == MoveOnly());
               ~~~~~^
UTypes.pass.cpp:67:9: error: no member named 'get' in namespace 'std'
        assert(std::get<2>(t) == MoveOnly());
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
UTypes.pass.cpp:67:21: note: instantiated from:
        assert(std::get<2>(t) == MoveOnly());
               ~~~~~^
17 errors generated.
UTypes.pass.cpp failed to compile
In file included from alloc.pass.cpp:36:
./../alloc_first.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_first.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_first.h:18:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                            ^
./../alloc_first.h:18:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                              ^
./../alloc_first.h:18:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a)
               ^
./../alloc_first.h:25:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                            ^
./../alloc_first.h:25:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                              ^
./../alloc_first.h:25:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
               ^
./../alloc_first.h:32:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                            ^
./../alloc_first.h:32:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                              ^
./../alloc_first.h:32:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
               ^
./../alloc_first.h:21:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:21:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:26:17: error: use of undeclared identifier 'd'
        : data_(d)
                ^
./../alloc_first.h:28:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:28:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:33:17: error: use of undeclared identifier 'd'
        : data_(d.data_)
                ^
./../alloc_first.h:35:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:35:16: note: instantiated from:
        assert(a.id() == 5);
               ^
In file included from alloc.pass.cpp:37:
./../alloc_last.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_last.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_last.h:18:22: error: unknown type name 'A1'
    alloc_last(const A1<int>& a)
                     ^
./../alloc_last.h:18:24: error: expected ')'
    alloc_last(const A1<int>& a)
                       ^
./../alloc_last.h:18:15: note: to match this '('
    alloc_last(const A1<int>& a)
              ^
./../alloc_last.h:25:29: error: unknown type name 'A1'
    alloc_last(int d, const A1<int>& a)
                            ^
./../alloc_last.h:25:31: error: expected ')'
    alloc_last(int d, const A1<int>& a)
                              ^
fatal error: too many errors emitted, stopping now
20 errors generated.
alloc.pass.cpp failed to compile
In file included from alloc_UTypes.pass.cpp:36:
./../alloc_first.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_first.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_first.h:18:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                            ^
./../alloc_first.h:18:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                              ^
./../alloc_first.h:18:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a)
               ^
./../alloc_first.h:25:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                            ^
./../alloc_first.h:25:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                              ^
./../alloc_first.h:25:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
               ^
./../alloc_first.h:32:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                            ^
./../alloc_first.h:32:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                              ^
./../alloc_first.h:32:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
               ^
./../alloc_first.h:21:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:21:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:26:17: error: use of undeclared identifier 'd'
        : data_(d)
                ^
./../alloc_first.h:28:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:28:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:33:17: error: use of undeclared identifier 'd'
        : data_(d.data_)
                ^
./../alloc_first.h:35:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:35:16: note: instantiated from:
        assert(a.id() == 5);
               ^
In file included from alloc_UTypes.pass.cpp:37:
./../alloc_last.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_last.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_last.h:18:22: error: unknown type name 'A1'
    alloc_last(const A1<int>& a)
                     ^
./../alloc_last.h:18:24: error: expected ')'
    alloc_last(const A1<int>& a)
                       ^
./../alloc_last.h:18:15: note: to match this '('
    alloc_last(const A1<int>& a)
              ^
./../alloc_last.h:25:29: error: unknown type name 'A1'
    alloc_last(int d, const A1<int>& a)
                            ^
./../alloc_last.h:25:31: error: expected ')'
    alloc_last(int d, const A1<int>& a)
                              ^
fatal error: too many errors emitted, stopping now
20 errors generated.
alloc_UTypes.pass.cpp failed to compile
In file included from alloc_const_Types.pass.cpp:35:
./../alloc_first.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_first.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_first.h:18:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                            ^
./../alloc_first.h:18:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                              ^
./../alloc_first.h:18:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a)
               ^
./../alloc_first.h:25:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                            ^
./../alloc_first.h:25:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                              ^
./../alloc_first.h:25:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
               ^
./../alloc_first.h:32:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                            ^
./../alloc_first.h:32:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                              ^
./../alloc_first.h:32:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
               ^
./../alloc_first.h:21:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:21:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:26:17: error: use of undeclared identifier 'd'
        : data_(d)
                ^
./../alloc_first.h:28:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:28:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:33:17: error: use of undeclared identifier 'd'
        : data_(d.data_)
                ^
./../alloc_first.h:35:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:35:16: note: instantiated from:
        assert(a.id() == 5);
               ^
In file included from alloc_const_Types.pass.cpp:36:
./../alloc_last.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_last.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_last.h:18:22: error: unknown type name 'A1'
    alloc_last(const A1<int>& a)
                     ^
./../alloc_last.h:18:24: error: expected ')'
    alloc_last(const A1<int>& a)
                       ^
./../alloc_last.h:18:15: note: to match this '('
    alloc_last(const A1<int>& a)
              ^
./../alloc_last.h:25:29: error: unknown type name 'A1'
    alloc_last(int d, const A1<int>& a)
                            ^
./../alloc_last.h:25:31: error: expected ')'
    alloc_last(int d, const A1<int>& a)
                              ^
fatal error: too many errors emitted, stopping now
20 errors generated.
alloc_const_Types.pass.cpp failed to compile
In file included from alloc_const_pair.pass.cpp:36:
./../alloc_first.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_first.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_first.h:18:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                            ^
./../alloc_first.h:18:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                              ^
./../alloc_first.h:18:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a)
               ^
./../alloc_first.h:25:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                            ^
./../alloc_first.h:25:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                              ^
./../alloc_first.h:25:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
               ^
./../alloc_first.h:32:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                            ^
./../alloc_first.h:32:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                              ^
./../alloc_first.h:32:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
               ^
./../alloc_first.h:21:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:21:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:26:17: error: use of undeclared identifier 'd'
        : data_(d)
                ^
./../alloc_first.h:28:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:28:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:33:17: error: use of undeclared identifier 'd'
        : data_(d.data_)
                ^
./../alloc_first.h:35:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:35:16: note: instantiated from:
        assert(a.id() == 5);
               ^
In file included from alloc_const_pair.pass.cpp:37:
./../alloc_last.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_last.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_last.h:18:22: error: unknown type name 'A1'
    alloc_last(const A1<int>& a)
                     ^
./../alloc_last.h:18:24: error: expected ')'
    alloc_last(const A1<int>& a)
                       ^
./../alloc_last.h:18:15: note: to match this '('
    alloc_last(const A1<int>& a)
              ^
./../alloc_last.h:25:29: error: unknown type name 'A1'
    alloc_last(int d, const A1<int>& a)
                            ^
./../alloc_last.h:25:31: error: expected ')'
    alloc_last(int d, const A1<int>& a)
                              ^
fatal error: too many errors emitted, stopping now
20 errors generated.
alloc_const_pair.pass.cpp failed to compile
In file included from alloc_convert_copy.pass.cpp:35:
./../alloc_first.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_first.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_first.h:18:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                            ^
./../alloc_first.h:18:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                              ^
./../alloc_first.h:18:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a)
               ^
./../alloc_first.h:25:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                            ^
./../alloc_first.h:25:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                              ^
./../alloc_first.h:25:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
               ^
./../alloc_first.h:32:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                            ^
./../alloc_first.h:32:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                              ^
./../alloc_first.h:32:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
               ^
./../alloc_first.h:21:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:21:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:26:17: error: use of undeclared identifier 'd'
        : data_(d)
                ^
./../alloc_first.h:28:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:28:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:33:17: error: use of undeclared identifier 'd'
        : data_(d.data_)
                ^
./../alloc_first.h:35:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:35:16: note: instantiated from:
        assert(a.id() == 5);
               ^
In file included from alloc_convert_copy.pass.cpp:36:
./../alloc_last.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_last.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_last.h:18:22: error: unknown type name 'A1'
    alloc_last(const A1<int>& a)
                     ^
./../alloc_last.h:18:24: error: expected ')'
    alloc_last(const A1<int>& a)
                       ^
./../alloc_last.h:18:15: note: to match this '('
    alloc_last(const A1<int>& a)
              ^
./../alloc_last.h:25:29: error: unknown type name 'A1'
    alloc_last(int d, const A1<int>& a)
                            ^
./../alloc_last.h:25:31: error: expected ')'
    alloc_last(int d, const A1<int>& a)
                              ^
fatal error: too many errors emitted, stopping now
20 errors generated.
alloc_convert_copy.pass.cpp failed to compile
In file included from alloc_convert_move.pass.cpp:37:
./../alloc_first.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_first.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_first.h:18:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                            ^
./../alloc_first.h:18:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                              ^
./../alloc_first.h:18:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a)
               ^
./../alloc_first.h:25:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                            ^
./../alloc_first.h:25:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                              ^
./../alloc_first.h:25:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
               ^
./../alloc_first.h:32:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                            ^
./../alloc_first.h:32:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                              ^
./../alloc_first.h:32:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
               ^
./../alloc_first.h:21:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:21:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:26:17: error: use of undeclared identifier 'd'
        : data_(d)
                ^
./../alloc_first.h:28:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:28:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:33:17: error: use of undeclared identifier 'd'
        : data_(d.data_)
                ^
./../alloc_first.h:35:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:35:16: note: instantiated from:
        assert(a.id() == 5);
               ^
In file included from alloc_convert_move.pass.cpp:38:
./../alloc_last.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_last.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_last.h:18:22: error: unknown type name 'A1'
    alloc_last(const A1<int>& a)
                     ^
./../alloc_last.h:18:24: error: expected ')'
    alloc_last(const A1<int>& a)
                       ^
./../alloc_last.h:18:15: note: to match this '('
    alloc_last(const A1<int>& a)
              ^
./../alloc_last.h:25:29: error: unknown type name 'A1'
    alloc_last(int d, const A1<int>& a)
                            ^
./../alloc_last.h:25:31: error: expected ')'
    alloc_last(int d, const A1<int>& a)
                              ^
fatal error: too many errors emitted, stopping now
20 errors generated.
alloc_convert_move.pass.cpp failed to compile
In file included from alloc_copy.pass.cpp:35:
./../alloc_first.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_first.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_first.h:18:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                            ^
./../alloc_first.h:18:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                              ^
./../alloc_first.h:18:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a)
               ^
./../alloc_first.h:25:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                            ^
./../alloc_first.h:25:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                              ^
./../alloc_first.h:25:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
               ^
./../alloc_first.h:32:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                            ^
./../alloc_first.h:32:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                              ^
./../alloc_first.h:32:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
               ^
./../alloc_first.h:21:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:21:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:26:17: error: use of undeclared identifier 'd'
        : data_(d)
                ^
./../alloc_first.h:28:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:28:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:33:17: error: use of undeclared identifier 'd'
        : data_(d.data_)
                ^
./../alloc_first.h:35:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:35:16: note: instantiated from:
        assert(a.id() == 5);
               ^
In file included from alloc_copy.pass.cpp:36:
./../alloc_last.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_last.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_last.h:18:22: error: unknown type name 'A1'
    alloc_last(const A1<int>& a)
                     ^
./../alloc_last.h:18:24: error: expected ')'
    alloc_last(const A1<int>& a)
                       ^
./../alloc_last.h:18:15: note: to match this '('
    alloc_last(const A1<int>& a)
              ^
./../alloc_last.h:25:29: error: unknown type name 'A1'
    alloc_last(int d, const A1<int>& a)
                            ^
./../alloc_last.h:25:31: error: expected ')'
    alloc_last(int d, const A1<int>& a)
                              ^
fatal error: too many errors emitted, stopping now
20 errors generated.
alloc_copy.pass.cpp failed to compile
In file included from alloc_move.pass.cpp:36:
./../alloc_first.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_first.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_first.h:18:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                            ^
./../alloc_first.h:18:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                              ^
./../alloc_first.h:18:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a)
               ^
./../alloc_first.h:25:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                            ^
./../alloc_first.h:25:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                              ^
./../alloc_first.h:25:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
               ^
./../alloc_first.h:32:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                            ^
./../alloc_first.h:32:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                              ^
./../alloc_first.h:32:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
               ^
./../alloc_first.h:21:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:21:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:26:17: error: use of undeclared identifier 'd'
        : data_(d)
                ^
./../alloc_first.h:28:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:28:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:33:17: error: use of undeclared identifier 'd'
        : data_(d.data_)
                ^
./../alloc_first.h:35:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:35:16: note: instantiated from:
        assert(a.id() == 5);
               ^
In file included from alloc_move.pass.cpp:37:
./../alloc_last.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_last.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_last.h:18:22: error: unknown type name 'A1'
    alloc_last(const A1<int>& a)
                     ^
./../alloc_last.h:18:24: error: expected ')'
    alloc_last(const A1<int>& a)
                       ^
./../alloc_last.h:18:15: note: to match this '('
    alloc_last(const A1<int>& a)
              ^
./../alloc_last.h:25:29: error: unknown type name 'A1'
    alloc_last(int d, const A1<int>& a)
                            ^
./../alloc_last.h:25:31: error: expected ')'
    alloc_last(int d, const A1<int>& a)
                              ^
fatal error: too many errors emitted, stopping now
20 errors generated.
alloc_move.pass.cpp failed to compile
In file included from alloc_move_pair.pass.cpp:37:
./../alloc_first.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_first.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_first.h:18:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                            ^
./../alloc_first.h:18:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a)
                                              ^
./../alloc_first.h:18:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a)
               ^
./../alloc_first.h:25:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                            ^
./../alloc_first.h:25:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
                                              ^
./../alloc_first.h:25:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
               ^
./../alloc_first.h:32:45: error: unknown type name 'A1'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                            ^
./../alloc_first.h:32:47: error: expected ')'
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
                                              ^
./../alloc_first.h:32:16: note: to match this '('
    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
               ^
./../alloc_first.h:21:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:21:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:26:17: error: use of undeclared identifier 'd'
        : data_(d)
                ^
./../alloc_first.h:28:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:28:16: note: instantiated from:
        assert(a.id() == 5);
               ^
./../alloc_first.h:33:17: error: use of undeclared identifier 'd'
        : data_(d.data_)
                ^
./../alloc_first.h:35:9: error: use of undeclared identifier 'a'
        assert(a.id() == 5);
        ^
./../alloc_first.h:35:16: note: instantiated from:
        assert(a.id() == 5);
               ^
In file included from alloc_move_pair.pass.cpp:38:
./../alloc_last.h:12:13: error: unknown type name 'A1'
    typedef A1<int> allocator_type;
            ^
./../alloc_last.h:12:15: error: expected member name or ';' after declaration specifiers
    typedef A1<int> allocator_type;
    ~~~~~~~~~~^
./../alloc_last.h:18:22: error: unknown type name 'A1'
    alloc_last(const A1<int>& a)
                     ^
./../alloc_last.h:18:24: error: expected ')'
    alloc_last(const A1<int>& a)
                       ^
./../alloc_last.h:18:15: note: to match this '('
    alloc_last(const A1<int>& a)
              ^
./../alloc_last.h:25:29: error: unknown type name 'A1'
    alloc_last(int d, const A1<int>& a)
                            ^
./../alloc_last.h:25:31: error: expected ')'
    alloc_last(int d, const A1<int>& a)
                              ^
fatal error: too many errors emitted, stopping now
20 errors generated.
alloc_move_pair.pass.cpp failed to compile
const_Types.pass.cpp:37:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int> t(2);
        ~~~~~^
const_Types.pass.cpp:38:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
const_Types.pass.cpp:38:21: note: instantiated from:
        assert(std::get<0>(t) == 2);
               ~~~~~^
const_Types.pass.cpp:41:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int, char*> t(2, 0);
        ~~~~~^
const_Types.pass.cpp:42:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
const_Types.pass.cpp:42:21: note: instantiated from:
        assert(std::get<0>(t) == 2);
               ~~~~~^
const_Types.pass.cpp:43:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == nullptr);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const_Types.pass.cpp:43:21: note: instantiated from:
        assert(std::get<1>(t) == nullptr);
               ~~~~~^
const_Types.pass.cpp:46:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int, char*> t(2, nullptr);
        ~~~~~^
const_Types.pass.cpp:47:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
const_Types.pass.cpp:47:21: note: instantiated from:
        assert(std::get<0>(t) == 2);
               ~~~~~^
const_Types.pass.cpp:48:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == nullptr);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const_Types.pass.cpp:48:21: note: instantiated from:
        assert(std::get<1>(t) == nullptr);
               ~~~~~^
const_Types.pass.cpp:51:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int, char*, std::string> t(2, nullptr, "text");
        ~~~~~^
const_Types.pass.cpp:52:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
const_Types.pass.cpp:52:21: note: instantiated from:
        assert(std::get<0>(t) == 2);
               ~~~~~^
const_Types.pass.cpp:53:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == nullptr);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const_Types.pass.cpp:53:21: note: instantiated from:
        assert(std::get<1>(t) == nullptr);
               ~~~~~^
const_Types.pass.cpp:54:9: error: no member named 'get' in namespace 'std'
        assert(std::get<2>(t) == "text");
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const_Types.pass.cpp:54:21: note: instantiated from:
        assert(std::get<2>(t) == "text");
               ~~~~~^
const_Types.pass.cpp:58:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int, char*, std::string> t(2);
        ~~~~~^
const_Types.pass.cpp:59:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
const_Types.pass.cpp:59:21: note: instantiated from:
        assert(std::get<0>(t) == 2);
               ~~~~~^
const_Types.pass.cpp:60:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == nullptr);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const_Types.pass.cpp:60:21: note: instantiated from:
        assert(std::get<1>(t) == nullptr);
               ~~~~~^
const_Types.pass.cpp:61:9: error: no member named 'get' in namespace 'std'
        assert(std::get<2>(t) == "");
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
const_Types.pass.cpp:61:21: note: instantiated from:
        assert(std::get<2>(t) == "");
               ~~~~~^
const_Types.pass.cpp:64:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int, char*, std::string> t(2, nullptr);
        ~~~~~^
const_Types.pass.cpp:65:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
const_Types.pass.cpp:65:21: note: instantiated from:
        assert(std::get<0>(t) == 2);
               ~~~~~^
const_Types.pass.cpp:66:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == nullptr);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const_Types.pass.cpp:66:21: note: instantiated from:
        assert(std::get<1>(t) == nullptr);
               ~~~~~^
fatal error: too many errors emitted, stopping now
20 errors generated.
const_Types.pass.cpp failed to compile
const_pair.pass.cpp:38:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, short> T1;
                ~~~~~^
const_pair.pass.cpp:38:27: error: expected unqualified-id
        typedef std::tuple<int, short> T1;
                          ^
const_pair.pass.cpp:40:9: error: use of undeclared identifier 'T1'
        T1 t1 = t0;
        ^
const_pair.pass.cpp:41:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t1) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
const_pair.pass.cpp:41:21: note: instantiated from:
        assert(std::get<0>(t1) == 2);
               ~~~~~^
const_pair.pass.cpp:42:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t1) == short('a'));
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const_pair.pass.cpp:42:21: note: instantiated from:
        assert(std::get<1>(t1) == short('a'));
               ~~~~~^
5 errors generated.
const_pair.pass.cpp failed to compile
convert_copy.pass.cpp:50:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double> T0;
                ~~~~~^
convert_copy.pass.cpp:50:27: error: expected unqualified-id
        typedef std::tuple<double> T0;
                          ^
convert_copy.pass.cpp:51:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int> T1;
                ~~~~~^
convert_copy.pass.cpp:51:27: error: expected unqualified-id
        typedef std::tuple<int> T1;
                          ^
convert_copy.pass.cpp:52:9: error: use of undeclared identifier 'T0'
        T0 t0(2.5);
        ^
convert_copy.pass.cpp:53:9: error: use of undeclared identifier 'T1'
        T1 t1 = t0;
        ^
convert_copy.pass.cpp:54:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t1) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
convert_copy.pass.cpp:54:21: note: instantiated from:
        assert(std::get<0>(t1) == 2);
               ~~~~~^
convert_copy.pass.cpp:57:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double, char> T0;
                ~~~~~^
convert_copy.pass.cpp:57:27: error: expected unqualified-id
        typedef std::tuple<double, char> T0;
                          ^
convert_copy.pass.cpp:58:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, int> T1;
                ~~~~~^
convert_copy.pass.cpp:58:27: error: expected unqualified-id
        typedef std::tuple<int, int> T1;
                          ^
convert_copy.pass.cpp:59:9: error: use of undeclared identifier 'T0'
        T0 t0(2.5, 'a');
        ^
convert_copy.pass.cpp:60:9: error: use of undeclared identifier 'T1'
        T1 t1 = t0;
        ^
convert_copy.pass.cpp:61:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t1) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
convert_copy.pass.cpp:61:21: note: instantiated from:
        assert(std::get<0>(t1) == 2);
               ~~~~~^
convert_copy.pass.cpp:62:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t1) == int('a'));
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
convert_copy.pass.cpp:62:21: note: instantiated from:
        assert(std::get<1>(t1) == int('a'));
               ~~~~~^
convert_copy.pass.cpp:65:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double, char, D> T0;
                ~~~~~^
convert_copy.pass.cpp:65:27: error: expected unqualified-id
        typedef std::tuple<double, char, D> T0;
                          ^
convert_copy.pass.cpp:66:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, int, B> T1;
                ~~~~~^
convert_copy.pass.cpp:66:27: error: expected unqualified-id
        typedef std::tuple<int, int, B> T1;
                          ^
fatal error: too many errors emitted, stopping now
20 errors generated.
convert_copy.pass.cpp failed to compile
convert_move.pass.cpp:53:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double> T0;
                ~~~~~^
convert_move.pass.cpp:53:27: error: expected unqualified-id
        typedef std::tuple<double> T0;
                          ^
convert_move.pass.cpp:54:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int> T1;
                ~~~~~^
convert_move.pass.cpp:54:27: error: expected unqualified-id
        typedef std::tuple<int> T1;
                          ^
convert_move.pass.cpp:55:9: error: use of undeclared identifier 'T0'
        T0 t0(2.5);
        ^
convert_move.pass.cpp:56:9: error: use of undeclared identifier 'T1'
        T1 t1 = std::move(t0);
        ^
convert_move.pass.cpp:57:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t1) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
convert_move.pass.cpp:57:21: note: instantiated from:
        assert(std::get<0>(t1) == 2);
               ~~~~~^
convert_move.pass.cpp:60:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double, char> T0;
                ~~~~~^
convert_move.pass.cpp:60:27: error: expected unqualified-id
        typedef std::tuple<double, char> T0;
                          ^
convert_move.pass.cpp:61:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, int> T1;
                ~~~~~^
convert_move.pass.cpp:61:27: error: expected unqualified-id
        typedef std::tuple<int, int> T1;
                          ^
convert_move.pass.cpp:62:9: error: use of undeclared identifier 'T0'
        T0 t0(2.5, 'a');
        ^
convert_move.pass.cpp:63:9: error: use of undeclared identifier 'T1'
        T1 t1 = std::move(t0);
        ^
convert_move.pass.cpp:64:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t1) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
convert_move.pass.cpp:64:21: note: instantiated from:
        assert(std::get<0>(t1) == 2);
               ~~~~~^
convert_move.pass.cpp:65:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t1) == int('a'));
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
convert_move.pass.cpp:65:21: note: instantiated from:
        assert(std::get<1>(t1) == int('a'));
               ~~~~~^
convert_move.pass.cpp:68:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double, char, D> T0;
                ~~~~~^
convert_move.pass.cpp:68:27: error: expected unqualified-id
        typedef std::tuple<double, char, D> T0;
                          ^
convert_move.pass.cpp:69:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, int, B> T1;
                ~~~~~^
convert_move.pass.cpp:69:27: error: expected unqualified-id
        typedef std::tuple<int, int, B> T1;
                          ^
fatal error: too many errors emitted, stopping now
20 errors generated.
convert_move.pass.cpp failed to compile
copy.pass.cpp:37:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<> T;
                ~~~~~^
copy.pass.cpp:37:27: error: expected unqualified-id
        typedef std::tuple<> T;
                          ^
copy.pass.cpp:38:9: error: use of undeclared identifier 'T'
        T t0;
        ^
copy.pass.cpp:39:9: error: use of undeclared identifier 'T'
        T t = t0;
        ^
copy.pass.cpp:42:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int> T;
                ~~~~~^
copy.pass.cpp:42:27: error: expected unqualified-id
        typedef std::tuple<int> T;
                          ^
copy.pass.cpp:43:9: error: use of undeclared identifier 'T'
        T t0(2);
        ^
copy.pass.cpp:44:9: error: use of undeclared identifier 'T'
        T t = t0;
        ^
copy.pass.cpp:45:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
copy.pass.cpp:45:21: note: instantiated from:
        assert(std::get<0>(t) == 2);
               ~~~~~^
copy.pass.cpp:48:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, char> T;
                ~~~~~^
copy.pass.cpp:48:27: error: expected unqualified-id
        typedef std::tuple<int, char> T;
                          ^
copy.pass.cpp:49:9: error: use of undeclared identifier 'T'
        T t0(2, 'a');
        ^
copy.pass.cpp:50:9: error: use of undeclared identifier 'T'
        T t = t0;
        ^
copy.pass.cpp:51:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
copy.pass.cpp:51:21: note: instantiated from:
        assert(std::get<0>(t) == 2);
               ~~~~~^
copy.pass.cpp:52:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == 'a');
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
copy.pass.cpp:52:21: note: instantiated from:
        assert(std::get<1>(t) == 'a');
               ~~~~~^
copy.pass.cpp:55:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, char, std::string> T;
                ~~~~~^
copy.pass.cpp:55:27: error: expected unqualified-id
        typedef std::tuple<int, char, std::string> T;
                          ^
copy.pass.cpp:56:9: error: use of undeclared identifier 'T'
        T t0(2, 'a', "some text");
        ^
copy.pass.cpp:57:9: error: use of undeclared identifier 'T'
        T t = t0;
        ^
fatal error: too many errors emitted, stopping now
20 errors generated.
copy.pass.cpp failed to compile
default.pass.cpp:39:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<> t;
        ~~~~~^
default.pass.cpp:42:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int> t;
        ~~~~~^
default.pass.cpp:43:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
default.pass.cpp:43:21: note: instantiated from:
        assert(std::get<0>(t) == 0);
               ~~~~~^
default.pass.cpp:46:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int, char*> t;
        ~~~~~^
default.pass.cpp:47:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
default.pass.cpp:47:21: note: instantiated from:
        assert(std::get<0>(t) == 0);
               ~~~~~^
default.pass.cpp:48:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == nullptr);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
default.pass.cpp:48:21: note: instantiated from:
        assert(std::get<1>(t) == nullptr);
               ~~~~~^
default.pass.cpp:51:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int, char*, std::string> t;
        ~~~~~^
default.pass.cpp:52:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
default.pass.cpp:52:21: note: instantiated from:
        assert(std::get<0>(t) == 0);
               ~~~~~^
default.pass.cpp:53:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == nullptr);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
default.pass.cpp:53:21: note: instantiated from:
        assert(std::get<1>(t) == nullptr);
               ~~~~~^
default.pass.cpp:54:9: error: no member named 'get' in namespace 'std'
        assert(std::get<2>(t) == "");
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
default.pass.cpp:54:21: note: instantiated from:
        assert(std::get<2>(t) == "");
               ~~~~~^
default.pass.cpp:57:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int, char*, std::string, DefaultOnly> t;
        ~~~~~^
default.pass.cpp:58:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
default.pass.cpp:58:21: note: instantiated from:
        assert(std::get<0>(t) == 0);
               ~~~~~^
default.pass.cpp:59:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == nullptr);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
default.pass.cpp:59:21: note: instantiated from:
        assert(std::get<1>(t) == nullptr);
               ~~~~~^
default.pass.cpp:60:9: error: no member named 'get' in namespace 'std'
        assert(std::get<2>(t) == "");
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
default.pass.cpp:60:21: note: instantiated from:
        assert(std::get<2>(t) == "");
               ~~~~~^
default.pass.cpp:61:9: error: no member named 'get' in namespace 'std'
        assert(std::get<3>(t) == DefaultOnly());
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
default.pass.cpp:61:21: note: instantiated from:
        assert(std::get<3>(t) == DefaultOnly());
               ~~~~~^
15 errors generated.
default.pass.cpp failed to compile
move.pass.cpp:38:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<> T;
                ~~~~~^
move.pass.cpp:38:27: error: expected unqualified-id
        typedef std::tuple<> T;
                          ^
move.pass.cpp:39:9: error: use of undeclared identifier 'T'
        T t0;
        ^
move.pass.cpp:40:9: error: use of undeclared identifier 'T'
        T t = std::move(t0);
        ^
move.pass.cpp:43:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<MoveOnly> T;
                ~~~~~^
move.pass.cpp:43:27: error: expected unqualified-id
        typedef std::tuple<MoveOnly> T;
                          ^
move.pass.cpp:44:9: error: use of undeclared identifier 'T'
        T t0(MoveOnly(0));
        ^
move.pass.cpp:45:9: error: use of undeclared identifier 'T'
        T t = std::move(t0);
        ^
move.pass.cpp:46:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
move.pass.cpp:46:21: note: instantiated from:
        assert(std::get<0>(t) == 0);
               ~~~~~^
move.pass.cpp:49:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<MoveOnly, MoveOnly> T;
                ~~~~~^
move.pass.cpp:49:27: error: expected unqualified-id
        typedef std::tuple<MoveOnly, MoveOnly> T;
                          ^
move.pass.cpp:50:9: error: use of undeclared identifier 'T'
        T t0(MoveOnly(0), MoveOnly(1));
        ^
move.pass.cpp:51:9: error: use of undeclared identifier 'T'
        T t = std::move(t0);
        ^
move.pass.cpp:52:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
move.pass.cpp:52:21: note: instantiated from:
        assert(std::get<0>(t) == 0);
               ~~~~~^
move.pass.cpp:53:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == 1);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
move.pass.cpp:53:21: note: instantiated from:
        assert(std::get<1>(t) == 1);
               ~~~~~^
move.pass.cpp:56:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<MoveOnly, MoveOnly, MoveOnly> T;
                ~~~~~^
move.pass.cpp:56:27: error: expected unqualified-id
        typedef std::tuple<MoveOnly, MoveOnly, MoveOnly> T;
                          ^
move.pass.cpp:57:9: error: use of undeclared identifier 'T'
        T t0(MoveOnly(0), MoveOnly(1), MoveOnly(2));
        ^
move.pass.cpp:58:9: error: use of undeclared identifier 'T'
        T t = std::move(t0);
        ^
fatal error: too many errors emitted, stopping now
20 errors generated.
move.pass.cpp failed to compile
move_pair.pass.cpp:54:52: error: a space is required between consecutive right angle brackets (use '> >')
        typedef std::pair<double, std::unique_ptr<D>> T0;
                                                   ^~
                                                   > >
move_pair.pass.cpp:55:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, std::unique_ptr<B>> T1;
                ~~~~~^
move_pair.pass.cpp:55:27: error: expected unqualified-id
        typedef std::tuple<int, std::unique_ptr<B>> T1;
                          ^
move_pair.pass.cpp:56:20: error: no viable constructor copying parameter of type 'std::unique_ptr<D>'
        T0 t0(2.5, std::unique_ptr<D>(new D(3)));
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from move_pair.pass.cpp:30:
In file included from ../../../../../include/tuple:136:
../../../../../include/memory:2080:5: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<D>' to 'std::unique_ptr<D, std::default_delete<D> > &' for 1st argument
    unique_ptr(unique_ptr&);
    ^
move_pair.pass.cpp:57:9: error: use of undeclared identifier 'T1'
        T1 t1 = std::move(t0);
        ^
move_pair.pass.cpp:58:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t1) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
move_pair.pass.cpp:58:21: note: instantiated from:
        assert(std::get<0>(t1) == 2);
               ~~~~~^
move_pair.pass.cpp:59:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t1)->id_ == 3);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
move_pair.pass.cpp:59:21: note: instantiated from:
        assert(std::get<1>(t1)->id_ == 3);
               ~~~~~^
In file included from move_pair.pass.cpp:30:
In file included from ../../../../../include/tuple:136:
In file included from ../../../../../include/memory:214:
../../../../../include/utility:230:23: error: no matching constructor for initialization of 'std::unique_ptr<D, std::default_delete<D> >'
        : first(__x), second(__y) {}
                      ^      ~~~
move_pair.pass.cpp:56:12: note: in instantiation of member function 'std::pair<double, std::unique_ptr<D, std::default_delete<D> > >::pair' requested here
        T0 t0(2.5, std::unique_ptr<D>(new D(3)));
           ^
In file included from move_pair.pass.cpp:30:
In file included from ../../../../../include/tuple:136:
../../../../../include/memory:2080:5: note: candidate constructor not viable: 1st argument ('std::unique_ptr<D, std::default_delete<D> > const') would lose const qualifier
    unique_ptr(unique_ptr&);
    ^
../../../../../include/memory:2099:31: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<D, std::default_delete<D> > const' to 'std::nullptr_t' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(nullptr_t)
                              ^
../../../../../include/memory:2105:40: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<D, std::default_delete<D> > const' to 'pointer' (aka 'D *') for 1st argument
    _LIBCPP_INLINE_VISIBILITY explicit unique_ptr(pointer __p)
                                       ^
../../../../../include/memory:2191:31: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<D, std::default_delete<D> > const' to '__rv<std::unique_ptr<D, std::default_delete<D> > >' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                              ^
../../../../../include/memory:2113:44: note: candidate template ignored: failed template argument deduction
        _LIBCPP_INLINE_VISIBILITY explicit unique_ptr(auto_ptr<_Up>& __p,
                                           ^
../../../../../include/memory:2093:31: note: candidate constructor not viable: requires 0 arguments, but 1 was provided
    _LIBCPP_INLINE_VISIBILITY unique_ptr()
                              ^
../../../../../include/memory:2202:31: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
    _LIBCPP_INLINE_VISIBILITY unique_ptr(pointer __p, deleter_type __d)
                              ^
8 errors generated.
move_pair.pass.cpp failed to compile
failed 18 tests in /test/utilities/tuple/tuple.tuple/tuple.cnstr
passed 4 tests in /test/utilities/tuple/tuple.tuple/tuple.cnstr
make_tuple.pass.cpp:40:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int, int&, float&> t = std::make_tuple(1, std::ref(i),
        ~~~~~^
make_tuple.pass.cpp:42:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 1);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
make_tuple.pass.cpp:42:21: note: instantiated from:
        assert(std::get<0>(t) == 1);
               ~~~~~^
make_tuple.pass.cpp:43:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
make_tuple.pass.cpp:43:21: note: instantiated from:
        assert(std::get<1>(t) == 0);
               ~~~~~^
make_tuple.pass.cpp:44:9: error: no member named 'get' in namespace 'std'
        assert(std::get<2>(t) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
make_tuple.pass.cpp:44:21: note: instantiated from:
        assert(std::get<2>(t) == 0);
               ~~~~~^
make_tuple.pass.cpp:47:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 1);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
make_tuple.pass.cpp:47:21: note: instantiated from:
        assert(std::get<0>(t) == 1);
               ~~~~~^
make_tuple.pass.cpp:48:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
make_tuple.pass.cpp:48:21: note: instantiated from:
        assert(std::get<1>(t) == 2);
               ~~~~~^
make_tuple.pass.cpp:49:9: error: no member named 'get' in namespace 'std'
        assert(std::get<2>(t) == 3.5);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
make_tuple.pass.cpp:49:21: note: instantiated from:
        assert(std::get<2>(t) == 3.5);
               ~~~~~^
make_tuple.pass.cpp:50:14: error: no member named 'get' in namespace 'std'
        std::get<1>(t) = 0;
        ~~~~~^
make_tuple.pass.cpp:51:14: error: no member named 'get' in namespace 'std'
        std::get<2>(t) = 0;
        ~~~~~^
9 errors generated.
make_tuple.pass.cpp failed to compile
tie.pass.cpp:40:14: error: no member named 'tie' in namespace 'std'
        std::tie(i, std::ignore, s) = std::make_tuple(42, 3.14, "C++");
        ~~~~~^
tie.pass.cpp:40:26: error: no member named 'ignore' in namespace 'std'
        std::tie(i, std::ignore, s) = std::make_tuple(42, 3.14, "C++");
                    ~~~~~^
2 errors generated.
tie.pass.cpp failed to compile
tuple_cat.pass.cpp:53:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<> t1;
        ~~~~~^
tuple_cat.pass.cpp:54:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<> t2;
        ~~~~~^
tuple_cat.pass.cpp:55:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<> t3 = std::tuple_cat(t1, t2);
        ~~~~~^
tuple_cat.pass.cpp:58:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<> t1;
        ~~~~~^
tuple_cat.pass.cpp:59:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int> t2(2);
        ~~~~~^
tuple_cat.pass.cpp:60:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int> t3 = std::tuple_cat(t1, t2);
        ~~~~~^
tuple_cat.pass.cpp:61:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t3) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
tuple_cat.pass.cpp:61:21: note: instantiated from:
        assert(std::get<0>(t3) == 2);
               ~~~~~^
tuple_cat.pass.cpp:64:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<> t1;
        ~~~~~^
tuple_cat.pass.cpp:65:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int> t2(2);
        ~~~~~^
tuple_cat.pass.cpp:66:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int> t3 = std::tuple_cat(t2, t1);
        ~~~~~^
tuple_cat.pass.cpp:67:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t3) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
tuple_cat.pass.cpp:67:21: note: instantiated from:
        assert(std::get<0>(t3) == 2);
               ~~~~~^
tuple_cat.pass.cpp:70:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int*> t1;
        ~~~~~^
tuple_cat.pass.cpp:71:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int> t2(2);
        ~~~~~^
tuple_cat.pass.cpp:72:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int*, int> t3 = std::tuple_cat(t1, t2);
        ~~~~~^
tuple_cat.pass.cpp:73:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t3) == nullptr);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tuple_cat.pass.cpp:73:21: note: instantiated from:
        assert(std::get<0>(t3) == nullptr);
               ~~~~~^
tuple_cat.pass.cpp:74:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t3) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
tuple_cat.pass.cpp:74:21: note: instantiated from:
        assert(std::get<1>(t3) == 2);
               ~~~~~^
tuple_cat.pass.cpp:77:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int*> t1;
        ~~~~~^
tuple_cat.pass.cpp:78:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int> t2(2);
        ~~~~~^
tuple_cat.pass.cpp:79:14: error: no member named 'tuple' in namespace 'std'
        std::tuple<int, int*> t3 = std::tuple_cat(t2, t1);
        ~~~~~^
fatal error: too many errors emitted, stopping now
20 errors generated.
tuple_cat.pass.cpp failed to compile
failed 3 tests in /test/utilities/tuple/tuple.tuple/tuple.creation
get_const.pass.cpp:39:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int> T;
                ~~~~~^
get_const.pass.cpp:39:27: error: expected unqualified-id
        typedef std::tuple<int> T;
                          ^
get_const.pass.cpp:40:15: error: unknown type name 'T'
        const T t(3);
              ^
get_const.pass.cpp:41:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 3);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_const.pass.cpp:41:21: note: instantiated from:
        assert(std::get<0>(t) == 3);
               ~~~~~^
get_const.pass.cpp:44:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<std::string, int> T;
                ~~~~~^
get_const.pass.cpp:44:27: error: expected unqualified-id
        typedef std::tuple<std::string, int> T;
                          ^
get_const.pass.cpp:45:15: error: unknown type name 'T'
        const T t("high", 5);
              ^
get_const.pass.cpp:45:17: error: excess elements in scalar initializer
        const T t("high", 5);
                ^ ~~~~~~~~~
get_const.pass.cpp:46:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == "high");
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
get_const.pass.cpp:46:21: note: instantiated from:
        assert(std::get<0>(t) == "high");
               ~~~~~^
get_const.pass.cpp:47:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == 5);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_const.pass.cpp:47:21: note: instantiated from:
        assert(std::get<1>(t) == 5);
               ~~~~~^
get_const.pass.cpp:50:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double&, std::string, int> T;
                ~~~~~^
get_const.pass.cpp:50:27: error: expected unqualified-id
        typedef std::tuple<double&, std::string, int> T;
                          ^
get_const.pass.cpp:52:15: error: unknown type name 'T'
        const T t(d, "high", 5);
              ^
get_const.pass.cpp:52:17: error: excess elements in scalar initializer
        const T t(d, "high", 5);
                ^ ~~~~~~~~~~~~
get_const.pass.cpp:53:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 1.5);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
get_const.pass.cpp:53:21: note: instantiated from:
        assert(std::get<0>(t) == 1.5);
               ~~~~~^
get_const.pass.cpp:54:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == "high");
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
get_const.pass.cpp:54:21: note: instantiated from:
        assert(std::get<1>(t) == "high");
               ~~~~~^
get_const.pass.cpp:55:9: error: no member named 'get' in namespace 'std'
        assert(std::get<2>(t) == 5);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_const.pass.cpp:55:21: note: instantiated from:
        assert(std::get<2>(t) == 5);
               ~~~~~^
get_const.pass.cpp:56:14: error: no member named 'get' in namespace 'std'
        std::get<0>(t) = 2.5;
        ~~~~~^
get_const.pass.cpp:57:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 2.5);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
get_const.pass.cpp:57:21: note: instantiated from:
        assert(std::get<0>(t) == 2.5);
               ~~~~~^
fatal error: too many errors emitted, stopping now
20 errors generated.
get_const.pass.cpp failed to compile
get_non_const.pass.cpp:39:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int> T;
                ~~~~~^
get_non_const.pass.cpp:39:27: error: expected unqualified-id
        typedef std::tuple<int> T;
                          ^
get_non_const.pass.cpp:40:9: error: use of undeclared identifier 'T'
        T t(3);
        ^
get_non_const.pass.cpp:41:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 3);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_non_const.pass.cpp:41:21: note: instantiated from:
        assert(std::get<0>(t) == 3);
               ~~~~~^
get_non_const.pass.cpp:42:14: error: no member named 'get' in namespace 'std'
        std::get<0>(t) = 2;
        ~~~~~^
get_non_const.pass.cpp:43:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_non_const.pass.cpp:43:21: note: instantiated from:
        assert(std::get<0>(t) == 2);
               ~~~~~^
get_non_const.pass.cpp:46:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<std::string, int> T;
                ~~~~~^
get_non_const.pass.cpp:46:27: error: expected unqualified-id
        typedef std::tuple<std::string, int> T;
                          ^
get_non_const.pass.cpp:47:9: error: use of undeclared identifier 'T'
        T t("high", 5);
        ^
get_non_const.pass.cpp:48:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == "high");
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
get_non_const.pass.cpp:48:21: note: instantiated from:
        assert(std::get<0>(t) == "high");
               ~~~~~^
get_non_const.pass.cpp:49:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == 5);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_non_const.pass.cpp:49:21: note: instantiated from:
        assert(std::get<1>(t) == 5);
               ~~~~~^
get_non_const.pass.cpp:50:14: error: no member named 'get' in namespace 'std'
        std::get<0>(t) = "four";
        ~~~~~^
get_non_const.pass.cpp:51:14: error: no member named 'get' in namespace 'std'
        std::get<1>(t) = 4;
        ~~~~~^
get_non_const.pass.cpp:52:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == "four");
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
get_non_const.pass.cpp:52:21: note: instantiated from:
        assert(std::get<0>(t) == "four");
               ~~~~~^
get_non_const.pass.cpp:53:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t) == 4);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_non_const.pass.cpp:53:21: note: instantiated from:
        assert(std::get<1>(t) == 4);
               ~~~~~^
get_non_const.pass.cpp:56:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double&, std::string, int> T;
                ~~~~~^
get_non_const.pass.cpp:56:27: error: expected unqualified-id
        typedef std::tuple<double&, std::string, int> T;
                          ^
get_non_const.pass.cpp:58:9: error: use of undeclared identifier 'T'
        T t(d, "high", 5);
        ^
get_non_const.pass.cpp:59:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t) == 1.5);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
get_non_const.pass.cpp:59:21: note: instantiated from:
        assert(std::get<0>(t) == 1.5);
               ~~~~~^
fatal error: too many errors emitted, stopping now
20 errors generated.
get_non_const.pass.cpp failed to compile
failed 2 tests in /test/utilities/tuple/tuple.tuple/tuple.elem
passed 1 tests in /test/utilities/tuple/tuple.tuple/tuple.elem
tuple_element.pass.cpp:41:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int> T;
                ~~~~~^
tuple_element.pass.cpp:41:27: error: expected unqualified-id
        typedef std::tuple<int> T;
                          ^
tuple_element.pass.cpp:42:9: error: use of undeclared identifier 'T'
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
tuple_element.pass.cpp:42:59: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, T>::type,
                                                          ^
tuple_element.pass.cpp:42:9: error: type name requires a specifier or qualifier
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
tuple_element.pass.cpp:42:63: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, T>::type,
                                                              ^
tuple_element.pass.cpp:42:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
tuple_element.pass.cpp:42:63: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, T>::type,
                                                              ^
tuple_element.pass.cpp:42:9: error: type name requires a specifier or qualifier
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
tuple_element.pass.cpp:43:43: note: instantiated from:
                                    int>::value), "");
                                          ^
tuple_element.pass.cpp:42:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
tuple_element.pass.cpp:43:43: note: instantiated from:
                                    int>::value), "");
                                          ^
tuple_element.pass.cpp:42:9: error: expected ')'
tuple_element.pass.cpp:42:9: note: to match this '('
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
tuple_element.pass.cpp:42:23: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, T>::type,
                      ^
tuple_element.pass.cpp:42:9: error: type name requires a specifier or qualifier
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
In file included from tuple_element.pass.cpp:35:
In file included from ../../../../../include/tuple:133:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
tuple_element.pass.cpp:42:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
In file included from tuple_element.pass.cpp:35:
In file included from ../../../../../include/tuple:133:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
tuple_element.pass.cpp:46:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<char, int> T;
                ~~~~~^
tuple_element.pass.cpp:46:27: error: expected unqualified-id
        typedef std::tuple<char, int> T;
                          ^
tuple_element.pass.cpp:47:9: error: use of undeclared identifier 'T'
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
tuple_element.pass.cpp:47:59: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, T>::type,
                                                          ^
tuple_element.pass.cpp:47:9: error: type name requires a specifier or qualifier
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
tuple_element.pass.cpp:47:63: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, T>::type,
                                                              ^
tuple_element.pass.cpp:47:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
tuple_element.pass.cpp:47:63: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, T>::type,
                                                              ^
tuple_element.pass.cpp:47:9: error: type name requires a specifier or qualifier
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
tuple_element.pass.cpp:48:44: note: instantiated from:
                                    char>::value), "");
                                           ^
tuple_element.pass.cpp:47:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
tuple_element.pass.cpp:48:44: note: instantiated from:
                                    char>::value), "");
                                           ^
tuple_element.pass.cpp:47:9: error: expected ')'
tuple_element.pass.cpp:47:9: note: to match this '('
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
tuple_element.pass.cpp:47:23: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, T>::type,
                      ^
tuple_element.pass.cpp:47:9: error: type name requires a specifier or qualifier
        static_assert((std::is_same<std::tuple_element<0, T>::type,
        ^
In file included from tuple_element.pass.cpp:35:
In file included from ../../../../../include/tuple:133:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
fatal error: too many errors emitted, stopping now
20 errors generated.
tuple_element.pass.cpp failed to compile
tuple_size.pass.cpp:38:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<> T;
                ~~~~~^
tuple_size.pass.cpp:38:27: error: expected unqualified-id
        typedef std::tuple<> T;
                          ^
tuple_size.pass.cpp:39:9: error: use of undeclared identifier 'T'
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 0>,
        ^
tuple_size.pass.cpp:40:55: note: instantiated from:
                                      std::tuple_size<T> >::value), "");
                                                      ^
tuple_size.pass.cpp:39:9: error: type name requires a specifier or qualifier
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 0>,
        ^
tuple_size.pass.cpp:40:58: note: instantiated from:
                                      std::tuple_size<T> >::value), "");
                                                         ^
tuple_size.pass.cpp:39:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 0>,
        ^
tuple_size.pass.cpp:40:58: note: instantiated from:
                                      std::tuple_size<T> >::value), "");
                                                         ^
tuple_size.pass.cpp:39:9: error: type name requires a specifier or qualifier
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 0>,
        ^
tuple_size.pass.cpp:40:61: note: instantiated from:
                                      std::tuple_size<T> >::value), "");
                                                            ^
tuple_size.pass.cpp:39:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 0>,
        ^
tuple_size.pass.cpp:40:61: note: instantiated from:
                                      std::tuple_size<T> >::value), "");
                                                            ^
tuple_size.pass.cpp:39:9: error: expected ')'
tuple_size.pass.cpp:39:9: note: to match this '('
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 0>,
        ^
tuple_size.pass.cpp:39:23: note: instantiated from:
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 0>,
                      ^
tuple_size.pass.cpp:39:9: error: type name requires a specifier or qualifier
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 0>,
        ^
In file included from tuple_size.pass.cpp:32:
In file included from ../../../../../include/tuple:133:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
tuple_size.pass.cpp:39:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 0>,
        ^
In file included from tuple_size.pass.cpp:32:
In file included from ../../../../../include/tuple:133:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
tuple_size.pass.cpp:43:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int> T;
                ~~~~~^
tuple_size.pass.cpp:43:27: error: expected unqualified-id
        typedef std::tuple<int> T;
                          ^
tuple_size.pass.cpp:44:9: error: use of undeclared identifier 'T'
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 1>,
        ^
tuple_size.pass.cpp:45:55: note: instantiated from:
                                      std::tuple_size<T> >::value), "");
                                                      ^
tuple_size.pass.cpp:44:9: error: type name requires a specifier or qualifier
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 1>,
        ^
tuple_size.pass.cpp:45:58: note: instantiated from:
                                      std::tuple_size<T> >::value), "");
                                                         ^
tuple_size.pass.cpp:44:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 1>,
        ^
tuple_size.pass.cpp:45:58: note: instantiated from:
                                      std::tuple_size<T> >::value), "");
                                                         ^
tuple_size.pass.cpp:44:9: error: type name requires a specifier or qualifier
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 1>,
        ^
tuple_size.pass.cpp:45:61: note: instantiated from:
                                      std::tuple_size<T> >::value), "");
                                                            ^
tuple_size.pass.cpp:44:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 1>,
        ^
tuple_size.pass.cpp:45:61: note: instantiated from:
                                      std::tuple_size<T> >::value), "");
                                                            ^
tuple_size.pass.cpp:44:9: error: expected ')'
tuple_size.pass.cpp:44:9: note: to match this '('
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 1>,
        ^
tuple_size.pass.cpp:44:23: note: instantiated from:
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 1>,
                      ^
tuple_size.pass.cpp:44:9: error: type name requires a specifier or qualifier
        static_assert((std::is_base_of<std::integral_constant<std::size_t, 1>,
        ^
In file included from tuple_size.pass.cpp:32:
In file included from ../../../../../include/tuple:133:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
fatal error: too many errors emitted, stopping now
20 errors generated.
tuple_size.pass.cpp failed to compile
failed 2 tests in /test/utilities/tuple/tuple.tuple/tuple.helper
begin.pass.cpp:41:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int*, int*> T;
                ~~~~~^
begin.pass.cpp:41:27: error: expected unqualified-id
        typedef std::tuple<int*, int*> T;
                          ^
begin.pass.cpp:43:15: error: unknown type name 'T'
        const T t(std::begin(array), std::end(array));
              ^
begin.pass.cpp:43:17: error: excess elements in scalar initializer
        const T t(std::begin(array), std::end(array));
                ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 errors generated.
begin.pass.cpp failed to compile
failed 1 tests in /test/utilities/tuple/tuple.tuple/tuple.range
eq.pass.cpp:39:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<> T1;
                ~~~~~^
eq.pass.cpp:39:27: error: expected unqualified-id
        typedef std::tuple<> T1;
                          ^
eq.pass.cpp:40:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<> T2;
                ~~~~~^
eq.pass.cpp:40:27: error: expected unqualified-id
        typedef std::tuple<> T2;
                          ^
eq.pass.cpp:41:15: error: unknown type name 'T1'
        const T1 t1;
              ^
eq.pass.cpp:42:15: error: unknown type name 'T2'
        const T2 t2;
              ^
eq.pass.cpp:47:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int> T1;
                ~~~~~^
eq.pass.cpp:47:27: error: expected unqualified-id
        typedef std::tuple<int> T1;
                          ^
eq.pass.cpp:48:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double> T2;
                ~~~~~^
eq.pass.cpp:48:27: error: expected unqualified-id
        typedef std::tuple<double> T2;
                          ^
eq.pass.cpp:49:15: error: unknown type name 'T1'
        const T1 t1(1);
              ^
eq.pass.cpp:50:15: error: unknown type name 'T2'
        const T2 t2(1.1);
              ^
eq.pass.cpp:55:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int> T1;
                ~~~~~^
eq.pass.cpp:55:27: error: expected unqualified-id
        typedef std::tuple<int> T1;
                          ^
eq.pass.cpp:56:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double> T2;
                ~~~~~^
eq.pass.cpp:56:27: error: expected unqualified-id
        typedef std::tuple<double> T2;
                          ^
eq.pass.cpp:57:15: error: unknown type name 'T1'
        const T1 t1(1);
              ^
eq.pass.cpp:58:15: error: unknown type name 'T2'
        const T2 t2(1);
              ^
eq.pass.cpp:63:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int, double> T1;
                ~~~~~^
fatal error: too many errors emitted, stopping now
20 errors generated.
eq.pass.cpp failed to compile
lt.pass.cpp:51:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<> T1;
                ~~~~~^
lt.pass.cpp:51:27: error: expected unqualified-id
        typedef std::tuple<> T1;
                          ^
lt.pass.cpp:52:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<> T2;
                ~~~~~^
lt.pass.cpp:52:27: error: expected unqualified-id
        typedef std::tuple<> T2;
                          ^
lt.pass.cpp:53:15: error: unknown type name 'T1'
        const T1 t1;
              ^
lt.pass.cpp:54:15: error: unknown type name 'T2'
        const T2 t2;
              ^
lt.pass.cpp:61:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<char> T1;
                ~~~~~^
lt.pass.cpp:61:27: error: expected unqualified-id
        typedef std::tuple<char> T1;
                          ^
lt.pass.cpp:62:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double> T2;
                ~~~~~^
lt.pass.cpp:62:27: error: expected unqualified-id
        typedef std::tuple<double> T2;
                          ^
lt.pass.cpp:63:15: error: unknown type name 'T1'
        const T1 t1(1);
              ^
lt.pass.cpp:64:15: error: unknown type name 'T2'
        const T2 t2(1);
              ^
lt.pass.cpp:71:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<char> T1;
                ~~~~~^
lt.pass.cpp:71:27: error: expected unqualified-id
        typedef std::tuple<char> T1;
                          ^
lt.pass.cpp:72:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<double> T2;
                ~~~~~^
lt.pass.cpp:72:27: error: expected unqualified-id
        typedef std::tuple<double> T2;
                          ^
lt.pass.cpp:73:15: error: unknown type name 'T1'
        const T1 t1(1);
              ^
lt.pass.cpp:74:15: error: unknown type name 'T2'
        const T2 t2(0.9);
              ^
lt.pass.cpp:81:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<char> T1;
                ~~~~~^
fatal error: too many errors emitted, stopping now
20 errors generated.
lt.pass.cpp failed to compile
failed 2 tests in /test/utilities/tuple/tuple.tuple/tuple.rel
non_member_swap.pass.cpp:39:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<> T;
                ~~~~~^
non_member_swap.pass.cpp:39:27: error: expected unqualified-id
        typedef std::tuple<> T;
                          ^
non_member_swap.pass.cpp:40:9: error: use of undeclared identifier 'T'
        T t0;
        ^
non_member_swap.pass.cpp:41:9: error: use of undeclared identifier 'T'
        T t1;
        ^
non_member_swap.pass.cpp:42:14: error: use of undeclared identifier 't0'
        swap(t0, t1);
             ^
non_member_swap.pass.cpp:45:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<MoveOnly> T;
                ~~~~~^
non_member_swap.pass.cpp:45:27: error: expected unqualified-id
        typedef std::tuple<MoveOnly> T;
                          ^
non_member_swap.pass.cpp:46:9: error: use of undeclared identifier 'T'
        T t0(MoveOnly(0));
        ^
non_member_swap.pass.cpp:47:9: error: use of undeclared identifier 'T'
        T t1(MoveOnly(1));
        ^
non_member_swap.pass.cpp:48:14: error: use of undeclared identifier 't0'
        swap(t0, t1);
             ^
non_member_swap.pass.cpp:49:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t0) == 1);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
non_member_swap.pass.cpp:49:21: note: instantiated from:
        assert(std::get<0>(t0) == 1);
               ~~~~~^
non_member_swap.pass.cpp:50:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t1) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
non_member_swap.pass.cpp:50:21: note: instantiated from:
        assert(std::get<0>(t1) == 0);
               ~~~~~^
non_member_swap.pass.cpp:53:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<MoveOnly, MoveOnly> T;
                ~~~~~^
non_member_swap.pass.cpp:53:27: error: expected unqualified-id
        typedef std::tuple<MoveOnly, MoveOnly> T;
                          ^
non_member_swap.pass.cpp:54:9: error: use of undeclared identifier 'T'
        T t0(MoveOnly(0), MoveOnly(1));
        ^
non_member_swap.pass.cpp:55:9: error: use of undeclared identifier 'T'
        T t1(MoveOnly(2), MoveOnly(3));
        ^
non_member_swap.pass.cpp:56:14: error: use of undeclared identifier 't0'
        swap(t0, t1);
             ^
non_member_swap.pass.cpp:57:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t0) == 2);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
non_member_swap.pass.cpp:57:21: note: instantiated from:
        assert(std::get<0>(t0) == 2);
               ~~~~~^
non_member_swap.pass.cpp:58:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(t0) == 3);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
non_member_swap.pass.cpp:58:21: note: instantiated from:
        assert(std::get<1>(t0) == 3);
               ~~~~~^
fatal error: too many errors emitted, stopping now
20 errors generated.
non_member_swap.pass.cpp failed to compile
failed 1 tests in /test/utilities/tuple/tuple.tuple/tuple.special
member_swap.pass.cpp:38:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<> T;
                ~~~~~^
member_swap.pass.cpp:38:27: error: expected unqualified-id
        typedef std::tuple<> T;
                          ^
member_swap.pass.cpp:39:9: error: use of undeclared identifier 'T'
        T t0;
        ^
member_swap.pass.cpp:40:9: error: use of undeclared identifier 'T'
        T t1;
        ^
member_swap.pass.cpp:41:9: error: use of undeclared identifier 't0'
        t0.swap(t1);
        ^
member_swap.pass.cpp:41:17: error: use of undeclared identifier 't1'
        t0.swap(t1);
                ^
member_swap.pass.cpp:44:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<MoveOnly> T;
                ~~~~~^
member_swap.pass.cpp:44:27: error: expected unqualified-id
        typedef std::tuple<MoveOnly> T;
                          ^
member_swap.pass.cpp:45:9: error: use of undeclared identifier 'T'
        T t0(MoveOnly(0));
        ^
member_swap.pass.cpp:46:9: error: use of undeclared identifier 'T'
        T t1(MoveOnly(1));
        ^
member_swap.pass.cpp:47:9: error: use of undeclared identifier 't0'
        t0.swap(t1);
        ^
member_swap.pass.cpp:47:17: error: use of undeclared identifier 't1'
        t0.swap(t1);
                ^
member_swap.pass.cpp:48:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t0) == 1);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
member_swap.pass.cpp:48:21: note: instantiated from:
        assert(std::get<0>(t0) == 1);
               ~~~~~^
member_swap.pass.cpp:49:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(t1) == 0);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
member_swap.pass.cpp:49:21: note: instantiated from:
        assert(std::get<0>(t1) == 0);
               ~~~~~^
member_swap.pass.cpp:52:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<MoveOnly, MoveOnly> T;
                ~~~~~^
member_swap.pass.cpp:52:27: error: expected unqualified-id
        typedef std::tuple<MoveOnly, MoveOnly> T;
                          ^
member_swap.pass.cpp:53:9: error: use of undeclared identifier 'T'
        T t0(MoveOnly(0), MoveOnly(1));
        ^
member_swap.pass.cpp:54:9: error: use of undeclared identifier 'T'
        T t1(MoveOnly(2), MoveOnly(3));
        ^
member_swap.pass.cpp:55:9: error: use of undeclared identifier 't0'
        t0.swap(t1);
        ^
fatal error: too many errors emitted, stopping now
20 errors generated.
member_swap.pass.cpp failed to compile
failed 1 tests in /test/utilities/tuple/tuple.tuple/tuple.swap
uses_allocator.pass.cpp:39:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<> T;
                ~~~~~^
uses_allocator.pass.cpp:39:27: error: expected unqualified-id
        typedef std::tuple<> T;
                          ^
uses_allocator.pass.cpp:40:9: error: use of undeclared identifier 'T'
        static_assert((std::is_base_of<std::true_type,
        ^
uses_allocator.pass.cpp:41:60: note: instantiated from:
                                       std::uses_allocator<T, A>>::value), "");
                                                           ^
uses_allocator.pass.cpp:40:9: error: type name requires a specifier or qualifier
        static_assert((std::is_base_of<std::true_type,
        ^
uses_allocator.pass.cpp:41:73: note: instantiated from:
                                       std::uses_allocator<T, A>>::value), "");
                                                                        ^
uses_allocator.pass.cpp:40:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_base_of<std::true_type,
        ^
uses_allocator.pass.cpp:41:73: note: instantiated from:
                                       std::uses_allocator<T, A>>::value), "");
                                                                        ^
uses_allocator.pass.cpp:40:9: error: type name requires a specifier or qualifier
        static_assert((std::is_base_of<std::true_type,
        ^
In file included from uses_allocator.pass.cpp:31:
In file included from ../../../../../include/tuple:133:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
uses_allocator.pass.cpp:40:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_base_of<std::true_type,
        ^
In file included from uses_allocator.pass.cpp:31:
In file included from ../../../../../include/tuple:133:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
uses_allocator.pass.cpp:41:79: error: type name requires a specifier or qualifier
                                       std::uses_allocator<T, A>>::value), "");
                                                                              ^
uses_allocator.pass.cpp:41:79: error: C++ requires a type specifier for all declarations
                                       std::uses_allocator<T, A>>::value), "");
                                                                              ^
uses_allocator.pass.cpp:41:79: error: expected ')'
uses_allocator.pass.cpp:40:9: note: to match this '('
        static_assert((std::is_base_of<std::true_type,
        ^
In file included from uses_allocator.pass.cpp:31:
In file included from ../../../../../include/tuple:133:
../../../../../include/__config:142:41: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                        ^
uses_allocator.pass.cpp:44:22: error: no type named 'tuple' in namespace 'std'
        typedef std::tuple<int> T;
                ~~~~~^
uses_allocator.pass.cpp:44:27: error: expected unqualified-id
        typedef std::tuple<int> T;
                          ^
uses_allocator.pass.cpp:45:9: error: use of undeclared identifier 'T'
        static_assert((std::is_base_of<std::true_type,
        ^
uses_allocator.pass.cpp:46:60: note: instantiated from:
                                       std::uses_allocator<T, A>>::value), "");
                                                           ^
uses_allocator.pass.cpp:45:9: error: type name requires a specifier or qualifier
        static_assert((std::is_base_of<std::true_type,
        ^
uses_allocator.pass.cpp:46:73: note: instantiated from:
                                       std::uses_allocator<T, A>>::value), "");
                                                                        ^
uses_allocator.pass.cpp:45:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_base_of<std::true_type,
        ^
uses_allocator.pass.cpp:46:73: note: instantiated from:
                                       std::uses_allocator<T, A>>::value), "");
                                                                        ^
uses_allocator.pass.cpp:45:9: error: type name requires a specifier or qualifier
        static_assert((std::is_base_of<std::true_type,
        ^
In file included from uses_allocator.pass.cpp:31:
In file included from ../../../../../include/tuple:133:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
uses_allocator.pass.cpp:45:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_base_of<std::true_type,
        ^
In file included from uses_allocator.pass.cpp:31:
In file included from ../../../../../include/tuple:133:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
uses_allocator.pass.cpp:46:79: error: type name requires a specifier or qualifier
                                       std::uses_allocator<T, A>>::value), "");
                                                                              ^
uses_allocator.pass.cpp:46:79: error: C++ requires a type specifier for all declarations
                                       std::uses_allocator<T, A>>::value), "");
                                                                              ^
fatal error: too many errors emitted, stopping now
20 errors generated.
uses_allocator.pass.cpp failed to compile
failed 1 tests in /test/utilities/tuple/tuple.tuple/tuple.traits
passed 1 tests in /test/utilities/type.index
passed 1 tests in /test/utilities/type.index/type.index.hash
passed 5 tests in /test/utilities/type.index/type.index.members
passed 2 tests in /test/utilities/type.index/type.index.overview
passed 1 tests in /test/utilities/type.index/type.index.synopsis
passed 1 tests in /test/utilities/utilities.general
passed 1 tests in /test/utilities/utility
passed 1 tests in /test/utilities/utility/declval
passed 14 tests in /test/utilities/utility/forward
passed 1 tests in /test/utilities/utility/operators
passed 1 tests in /test/utilities/utility/pairs
get_const.pass.cpp:40:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(p) == 3);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_const.pass.cpp:40:21: note: instantiated from:
        assert(std::get<0>(p) == 3);
               ~~~~~^
get_const.pass.cpp:41:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(p) == 4);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_const.pass.cpp:41:21: note: instantiated from:
        assert(std::get<1>(p) == 4);
               ~~~~~^
2 errors generated.
get_const.pass.cpp failed to compile
get_non_const.pass.cpp:40:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(p) == 3);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_non_const.pass.cpp:40:21: note: instantiated from:
        assert(std::get<0>(p) == 3);
               ~~~~~^
get_non_const.pass.cpp:41:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(p) == 4);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_non_const.pass.cpp:41:21: note: instantiated from:
        assert(std::get<1>(p) == 4);
               ~~~~~^
get_non_const.pass.cpp:42:14: error: no member named 'get' in namespace 'std'
        std::get<0>(p) = 5;
        ~~~~~^
get_non_const.pass.cpp:43:14: error: no member named 'get' in namespace 'std'
        std::get<1>(p) = 6;
        ~~~~~^
get_non_const.pass.cpp:44:9: error: no member named 'get' in namespace 'std'
        assert(std::get<0>(p) == 5);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_non_const.pass.cpp:44:21: note: instantiated from:
        assert(std::get<0>(p) == 5);
               ~~~~~^
get_non_const.pass.cpp:45:9: error: no member named 'get' in namespace 'std'
        assert(std::get<1>(p) == 6);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_non_const.pass.cpp:45:21: note: instantiated from:
        assert(std::get<1>(p) == 6);
               ~~~~~^
6 errors generated.
get_non_const.pass.cpp failed to compile
tuple_element.pass.cpp:36:9: error: implicit instantiation of undefined template 'std::tuple_element<0, std::pair<int, short> >'
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int>::value), "");
        ^
tuple_element.pass.cpp:36:37: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int>::value), "");
                                    ^
In file included from tuple_element.pass.cpp:30:
In file included from ../../../../../include/utility:131:
In file included from ../../../../../include/__tuple:44:
../../../../../include/__tuple_03:38:40: note: template is declared here
template <size_t _Ip, class _Tp> class tuple_element;
                                       ^
tuple_element.pass.cpp:36:9: error: type name requires a specifier or qualifier
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int>::value), "");
        ^
tuple_element.pass.cpp:36:76: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int>::value), "");
                                                                           ^
tuple_element.pass.cpp:36:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int>::value), "");
        ^
tuple_element.pass.cpp:36:76: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int>::value), "");
                                                                           ^
tuple_element.pass.cpp:36:9: error: expected ')'
tuple_element.pass.cpp:36:9: note: to match this '('
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int>::value), "");
        ^
tuple_element.pass.cpp:36:23: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int>::value), "");
                      ^
tuple_element.pass.cpp:36:9: error: type name requires a specifier or qualifier
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int>::value), "");
        ^
In file included from tuple_element.pass.cpp:30:
In file included from ../../../../../include/utility:130:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
tuple_element.pass.cpp:36:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int>::value), "");
        ^
In file included from tuple_element.pass.cpp:30:
In file included from ../../../../../include/utility:130:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
tuple_element.pass.cpp:37:9: error: implicit instantiation of undefined template 'std::tuple_element<1, std::pair<int, short> >'
        static_assert((std::is_same<std::tuple_element<1, P1>::type, short>::value), "");
        ^
tuple_element.pass.cpp:37:37: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<1, P1>::type, short>::value), "");
                                    ^
In file included from tuple_element.pass.cpp:30:
In file included from ../../../../../include/utility:131:
In file included from ../../../../../include/__tuple:44:
../../../../../include/__tuple_03:38:40: note: template is declared here
template <size_t _Ip, class _Tp> class tuple_element;
                                       ^
tuple_element.pass.cpp:37:9: error: type name requires a specifier or qualifier
        static_assert((std::is_same<std::tuple_element<1, P1>::type, short>::value), "");
        ^
tuple_element.pass.cpp:37:78: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<1, P1>::type, short>::value), "");
                                                                             ^
tuple_element.pass.cpp:37:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_same<std::tuple_element<1, P1>::type, short>::value), "");
        ^
tuple_element.pass.cpp:37:78: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<1, P1>::type, short>::value), "");
                                                                             ^
tuple_element.pass.cpp:37:9: error: expected ')'
tuple_element.pass.cpp:37:9: note: to match this '('
        static_assert((std::is_same<std::tuple_element<1, P1>::type, short>::value), "");
        ^
tuple_element.pass.cpp:37:23: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<1, P1>::type, short>::value), "");
                      ^
tuple_element.pass.cpp:37:9: error: type name requires a specifier or qualifier
        static_assert((std::is_same<std::tuple_element<1, P1>::type, short>::value), "");
        ^
In file included from tuple_element.pass.cpp:30:
In file included from ../../../../../include/utility:130:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
tuple_element.pass.cpp:37:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_same<std::tuple_element<1, P1>::type, short>::value), "");
        ^
In file included from tuple_element.pass.cpp:30:
In file included from ../../../../../include/utility:130:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
tuple_element.pass.cpp:41:9: error: implicit instantiation of undefined template 'std::tuple_element<0, std::pair<int *, char> >'
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int*>::value), "");
        ^
tuple_element.pass.cpp:41:37: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int*>::value), "");
                                    ^
In file included from tuple_element.pass.cpp:30:
In file included from ../../../../../include/utility:131:
In file included from ../../../../../include/__tuple:44:
../../../../../include/__tuple_03:38:40: note: template is declared here
template <size_t _Ip, class _Tp> class tuple_element;
                                       ^
tuple_element.pass.cpp:41:9: error: type name requires a specifier or qualifier
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int*>::value), "");
        ^
tuple_element.pass.cpp:41:77: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int*>::value), "");
                                                                            ^
tuple_element.pass.cpp:41:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int*>::value), "");
        ^
tuple_element.pass.cpp:41:77: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int*>::value), "");
                                                                            ^
tuple_element.pass.cpp:41:9: error: expected ')'
tuple_element.pass.cpp:41:9: note: to match this '('
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int*>::value), "");
        ^
tuple_element.pass.cpp:41:23: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int*>::value), "");
                      ^
tuple_element.pass.cpp:41:9: error: type name requires a specifier or qualifier
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int*>::value), "");
        ^
In file included from tuple_element.pass.cpp:30:
In file included from ../../../../../include/utility:130:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
tuple_element.pass.cpp:41:9: error: C++ requires a type specifier for all declarations
        static_assert((std::is_same<std::tuple_element<0, P1>::type, int*>::value), "");
        ^
In file included from tuple_element.pass.cpp:30:
In file included from ../../../../../include/utility:130:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
tuple_element.pass.cpp:42:9: error: implicit instantiation of undefined template 'std::tuple_element<1, std::pair<int *, char> >'
        static_assert((std::is_same<std::tuple_element<1, P1>::type, char>::value), "");
        ^
tuple_element.pass.cpp:42:37: note: instantiated from:
        static_assert((std::is_same<std::tuple_element<1, P1>::type, char>::value), "");
                                    ^
fatal error: too many errors emitted, stopping now
20 errors generated.
tuple_element.pass.cpp failed to compile
tuple_size.pass.cpp:36:9: error: implicit instantiation of undefined template 'std::tuple_size<std::pair<int, short> >'
        static_assert((std::tuple_size<P1>::value == 2), "");
        ^
tuple_size.pass.cpp:36:24: note: instantiated from:
        static_assert((std::tuple_size<P1>::value == 2), "");
                       ^
In file included from tuple_size.pass.cpp:30:
In file included from ../../../../../include/utility:131:
In file included from ../../../../../include/__tuple:44:
../../../../../include/__tuple_03:37:28: note: template is declared here
template <class _Tp> class tuple_size;
                           ^
tuple_size.pass.cpp:36:9: error: type name requires a specifier or qualifier
        static_assert((std::tuple_size<P1>::value == 2), "");
        ^
In file included from tuple_size.pass.cpp:30:
In file included from ../../../../../include/utility:130:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
tuple_size.pass.cpp:36:9: error: C++ requires a type specifier for all declarations
        static_assert((std::tuple_size<P1>::value == 2), "");
        ^
In file included from tuple_size.pass.cpp:30:
In file included from ../../../../../include/utility:130:
../../../../../include/__config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
3 errors generated.
tuple_size.pass.cpp failed to compile
failed 4 tests in /test/utilities/utility/pairs/pair.astuple
passed 1 tests in /test/utilities/utility/pairs/pair.astuple
passed 1 tests in /test/utilities/utility/pairs/pair.piecewise
passed 2 tests in /test/utilities/utility/pairs/pair.range
passed 1 tests in /test/utilities/utility/pairs/pairs.general
passed 15 tests in /test/utilities/utility/pairs/pairs.pair
passed 2 tests in /test/utilities/utility/utility.swap
passed 1 tests in /test/utilities/utility.requirements
passed 1 tests in /test/utilities/utility.requirements/allocator.requirements
passed 1 tests in /test/utilities/utility.requirements/hash.requirements
passed 1 tests in /test/utilities/utility.requirements/nullablepointer.requirements
passed 1 tests in /test/utilities/utility.requirements/swappable.requirements
passed 1 tests in /test/utilities/utility.requirements/utility.arg.requirements
****************************************************
Results for /test:
using Apple clang version 1.5 (trunk 102606)
Target: x86_64-apple-darwin10
Thread model: posix
with -nostdinc++ -nodefaultlibs /usr/lib/libSystem.B.dylib -arch i386 -I../include /usr/lib/libc++.dylib
----------------------------------------------------
sections without tests   : 136
sections with failures   : 48
sections without failures: 868
                       +   ----
total number of sections : 1052
----------------------------------------------------
number of tests failed   : 151
number of tests passed   : 3240
                       +   ----
total number of tests    : 3391
****************************************************
