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
not implemented:  /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:561:
../../../../include/utility:134:38: error: reference to type 'int const' requires an initializer
    _YUGA_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:561:
../../../../include/utility:134:47: error: reference to type 'int const' requires an initializer
    _YUGA_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:561:
../../../../include/utility:134:38: error: reference to type 'int const' requires an initializer
    _YUGA_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:561:
../../../../include/utility:134:47: error: reference to type 'int const' requires an initializer
    _YUGA_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 1 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 22 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 2 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 1 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
passed 5 tests in /test/containers/sequences/deque/deque.special
passed 2 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 1 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 1 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
eq.pass.cpp:43:2: error: #error unordered_map == unordered_map not implemented
#error unordered_map == unordered_map not implemented
 ^
1 error generated.
eq.pass.cpp failed to compile
reserve.pass.cpp:36:2: error: #error unordered_map::reserve not implemented
#error unordered_map::reserve not implemented
 ^
1 error generated.
reserve.pass.cpp failed to compile
failed 2 tests in /test/containers/unord/unord.map
passed 17 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
eq.pass.cpp:43:2: error: #error unordered_multimap == unordered_multimap not implemented
#error unordered_multimap == unordered_multimap not implemented
 ^
1 error generated.
eq.pass.cpp failed to compile
reserve.pass.cpp:36:2: error: #error unordered_multimap::reserve not implemented
#error unordered_multimap::reserve not implemented
 ^
1 error generated.
reserve.pass.cpp failed to compile
failed 2 tests in /test/containers/unord/unord.multimap
passed 19 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
eq.pass.cpp:43:2: error: #error unordered_multiset == unordered_multiset not implemented
#error unordered_multiset == unordered_multiset not implemented
 ^
1 error generated.
eq.pass.cpp failed to compile
reserve.pass.cpp:35:2: error: #error unordered_multiset::reserve not implemented
#error unordered_multiset::reserve not implemented
 ^
1 error generated.
reserve.pass.cpp failed to compile
failed 2 tests in /test/containers/unord/unord.multiset
passed 31 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
eq.pass.cpp:43:2: error: #error unordered_set == unordered_set not implemented
#error unordered_set == unordered_set not implemented
 ^
1 error generated.
eq.pass.cpp failed to compile
reserve.pass.cpp:35:2: error: #error unordered_set::reserve not implemented
#error unordered_set::reserve not implemented
 ^
1 error generated.
reserve.pass.cpp failed to compile
failed 2 tests in /test/containers/unord/unord.set
passed 31 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
./testit: line 96: 16532 Abort trap              ./a.out
ccp.pass.cpp failed at run time
./testit: line 96: 16540 Abort trap              ./a.out
ccp_size.pass.cpp failed at run time
./testit: line 96: 16548 Abort trap              ./a.out
cp.pass.cpp failed at run time
./testit: line 96: 16557 Abort trap              ./a.out
cp_size.pass.cpp failed at run time
failed 4 tests in /test/depr/depr.str.strstreams/depr.istrstream/depr.istrstream.cons
./testit: line 96: 16568 Abort trap              ./a.out
rdbuf.pass.cpp failed at run time
./testit: line 96: 16575 Abort trap              ./a.out
str.pass.cpp failed at run time
failed 2 tests in /test/depr/depr.str.strstreams/depr.istrstream/depr.istrstream.members
passed 1 tests in /test/depr/depr.str.strstreams/depr.ostrstream
./testit: line 96: 16599 Abort trap              ./a.out
cp_size_mode.pass.cpp failed at run time
./testit: line 96: 16606 Abort trap              ./a.out
default.pass.cpp failed at run time
failed 2 tests in /test/depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.cons
./testit: line 96: 16617 Abort trap              ./a.out
freeze.pass.cpp failed at run time
./testit: line 96: 16624 Abort trap              ./a.out
pcount.pass.cpp failed at run time
./testit: line 96: 16631 Abort trap              ./a.out
rdbuf.pass.cpp failed at run time
./testit: line 96: 16638 Abort trap              ./a.out
str.pass.cpp failed at run time
failed 4 tests in /test/depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.members
passed 1 tests in /test/depr/depr.str.strstreams/depr.strstream
./testit: line 96: 16660 Abort trap              ./a.out
cp_size_mode.pass.cpp failed at run time
./testit: line 96: 16667 Abort trap              ./a.out
default.pass.cpp failed at run time
failed 2 tests in /test/depr/depr.str.strstreams/depr.strstream/depr.strstream.cons
./testit: line 96: 16678 Abort trap              ./a.out
rdbuf.pass.cpp failed at run time
failed 1 tests in /test/depr/depr.str.strstreams/depr.strstream/depr.strstream.dest
./testit: line 96: 16689 Abort trap              ./a.out
freeze.pass.cpp failed at run time
./testit: line 96: 16696 Abort trap              ./a.out
pcount.pass.cpp failed at run time
./testit: line 96: 16703 Abort trap              ./a.out
str.pass.cpp failed at run time
failed 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 1 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
./testit: line 96: 17212 Abort trap              ./a.out
stream_inserter.pass.cpp failed at run time
failed 1 tests in /test/diagnostics/syserr/syserr.errcode/syserr.errcode.nonmembers
passed 2 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 1 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
./testit: line 96: 17533 Abort trap              ./a.out
member_swap.pass.cpp failed at run time
./testit: line 96: 17548 Abort trap              ./a.out
nonmember_swap.pass.cpp failed at run time
failed 2 tests in /test/input.output/file.streams/fstreams/filebuf.assign
passed 1 tests in /test/input.output/file.streams/fstreams/filebuf.assign
./testit: line 96: 17560 Abort trap              ./a.out
default.pass.cpp failed at run time
failed 1 tests in /test/input.output/file.streams/fstreams/filebuf.cons
passed 1 tests in /test/input.output/file.streams/fstreams/filebuf.cons
./testit: line 96: 17580 Abort trap              ./a.out
open_pointer.pass.cpp failed at run time
failed 1 tests in /test/input.output/file.streams/fstreams/filebuf.members
./testit: line 96: 17591 Abort trap              ./a.out
overflow.pass.cpp failed at run time
./testit: line 96: 17598 Abort trap              ./a.out
pbackfail.pass.cpp failed at run time
./testit: line 96: 17605 Abort trap              ./a.out
seekoff.pass.cpp failed at run time
./testit: line 96: 17612 Abort trap              ./a.out
underflow.pass.cpp failed at run time
failed 4 tests in /test/input.output/file.streams/fstreams/filebuf.virtuals
passed 1 tests in /test/input.output/file.streams/fstreams/fstream
./testit: line 96: 17636 Abort trap              ./a.out
member_swap.pass.cpp failed at run time
./testit: line 96: 17650 Abort trap              ./a.out
nonmember_swap.pass.cpp failed at run time
failed 2 tests in /test/input.output/file.streams/fstreams/fstream.assign
passed 1 tests in /test/input.output/file.streams/fstreams/fstream.assign
./testit: line 96: 17662 Abort trap              ./a.out
default.pass.cpp failed at run time
./testit: line 96: 17676 Abort trap              ./a.out
pointer.pass.cpp failed at run time
./testit: line 96: 17683 Abort trap              ./a.out
string.pass.cpp failed at run time
failed 3 tests in /test/input.output/file.streams/fstreams/fstream.cons
passed 1 tests in /test/input.output/file.streams/fstreams/fstream.cons
./testit: line 96: 17695 Abort trap              ./a.out
close.pass.cpp failed at run time
./testit: line 96: 17702 Abort trap              ./a.out
open_pointer.pass.cpp failed at run time
./testit: line 96: 17709 Abort trap              ./a.out
open_string.pass.cpp failed at run time
./testit: line 96: 17716 Abort trap              ./a.out
rdbuf.pass.cpp failed at run time
failed 4 tests in /test/input.output/file.streams/fstreams/fstream.members
passed 1 tests in /test/input.output/file.streams/fstreams/ifstream
./testit: line 96: 17738 Abort trap              ./a.out
member_swap.pass.cpp failed at run time
./testit: line 96: 17752 Abort trap              ./a.out
nonmember_swap.pass.cpp failed at run time
failed 2 tests in /test/input.output/file.streams/fstreams/ifstream.assign
passed 1 tests in /test/input.output/file.streams/fstreams/ifstream.assign
./testit: line 96: 17764 Abort trap              ./a.out
default.pass.cpp failed at run time
./testit: line 96: 17779 Abort trap              ./a.out
pointer.pass.cpp failed at run time
./testit: line 96: 17786 Abort trap              ./a.out
string.pass.cpp failed at run time
failed 3 tests in /test/input.output/file.streams/fstreams/ifstream.cons
passed 1 tests in /test/input.output/file.streams/fstreams/ifstream.cons
./testit: line 96: 17798 Abort trap              ./a.out
close.pass.cpp failed at run time
./testit: line 96: 17805 Abort trap              ./a.out
open_pointer.pass.cpp failed at run time
./testit: line 96: 17812 Abort trap              ./a.out
open_string.pass.cpp failed at run time
./testit: line 96: 17819 Abort trap              ./a.out
rdbuf.pass.cpp failed at run time
failed 4 tests in /test/input.output/file.streams/fstreams/ifstream.members
passed 1 tests in /test/input.output/file.streams/fstreams/ofstream
./testit: line 96: 17842 Abort trap              ./a.out
member_swap.pass.cpp failed at run time
./testit: line 96: 17856 Abort trap              ./a.out
nonmember_swap.pass.cpp failed at run time
failed 2 tests in /test/input.output/file.streams/fstreams/ofstream.assign
passed 1 tests in /test/input.output/file.streams/fstreams/ofstream.assign
./testit: line 96: 17868 Abort trap              ./a.out
default.pass.cpp failed at run time
./testit: line 96: 17882 Abort trap              ./a.out
pointer.pass.cpp failed at run time
./testit: line 96: 17889 Abort trap              ./a.out
string.pass.cpp failed at run time
failed 3 tests in /test/input.output/file.streams/fstreams/ofstream.cons
passed 1 tests in /test/input.output/file.streams/fstreams/ofstream.cons
./testit: line 96: 17901 Abort trap              ./a.out
close.pass.cpp failed at run time
./testit: line 96: 17908 Abort trap              ./a.out
open_pointer.pass.cpp failed at run time
./testit: line 96: 17915 Abort trap              ./a.out
open_string.pass.cpp failed at run time
./testit: line 96: 17923 Abort trap              ./a.out
rdbuf.pass.cpp failed at run time
failed 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
./testit: line 96: 17956 Abort trap              ./a.out
get_money.pass.cpp failed at run time
./testit: line 96: 17963 Abort trap              ./a.out
get_time.pass.cpp failed at run time
./testit: line 96: 17970 Abort trap              ./a.out
put_money.pass.cpp failed at run time
./testit: line 96: 17977 Abort trap              ./a.out
put_time.pass.cpp failed at run time
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
./testit: line 96: 18010 Abort trap              ./a.out
member_swap.pass.cpp failed at run time
failed 1 tests in /test/input.output/iostream.format/input.streams/iostreamclass/iostream.assign
passed 1 tests in /test/input.output/iostream.format/input.streams/iostreamclass/iostream.assign
./testit: line 96: 18036 Abort trap              ./a.out
streambuf.pass.cpp failed at run time
failed 1 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.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
./testit: line 96: 18071 Abort trap              ./a.out
member_swap.pass.cpp failed at run time
failed 1 tests in /test/input.output/iostream.format/input.streams/istream/istream.assign
passed 1 tests in /test/input.output/iostream.format/input.streams/istream/istream.assign
./testit: line 96: 18097 Abort trap              ./a.out
streambuf.pass.cpp failed at run time
failed 1 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.cons
./testit: line 96: 18109 Abort trap              ./a.out
ctor.pass.cpp failed at run time
failed 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
./testit: line 96: 18131 Abort trap              ./a.out
bool.pass.cpp failed at run time
./testit: line 96: 18138 Abort trap              ./a.out
double.pass.cpp failed at run time
./testit: line 96: 18145 Abort trap              ./a.out
float.pass.cpp failed at run time
./testit: line 96: 18152 Abort trap              ./a.out
int.pass.cpp failed at run time
./testit: line 96: 18159 Abort trap              ./a.out
long.pass.cpp failed at run time
./testit: line 96: 18166 Abort trap              ./a.out
long_double.pass.cpp failed at run time
./testit: line 96: 18173 Abort trap              ./a.out
long_long.pass.cpp failed at run time
./testit: line 96: 18180 Abort trap              ./a.out
pointer.pass.cpp failed at run time
./testit: line 96: 18187 Abort trap              ./a.out
short.pass.cpp failed at run time
./testit: line 96: 18194 Abort trap              ./a.out
unsigned_int.pass.cpp failed at run time
./testit: line 96: 18201 Abort trap              ./a.out
unsigned_long.pass.cpp failed at run time
./testit: line 96: 18208 Abort trap              ./a.out
unsigned_long_long.pass.cpp failed at run time
./testit: line 96: 18215 Abort trap              ./a.out
unsigned_short.pass.cpp failed at run time
failed 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
./testit: line 96: 18237 Abort trap              ./a.out
basic_ios.pass.cpp failed at run time
./testit: line 96: 18244 Abort trap              ./a.out
chart.pass.cpp failed at run time
./testit: line 96: 18251 Abort trap              ./a.out
ios_base.pass.cpp failed at run time
./testit: line 96: 18259 Abort trap              ./a.out
istream.pass.cpp failed at run time
./testit: line 96: 18266 Abort trap              ./a.out
signed_char.pass.cpp failed at run time
./testit: line 96: 18273 Abort trap              ./a.out
signed_char_pointer.pass.cpp failed at run time
./testit: line 96: 18280 Abort trap              ./a.out
streambuf.pass.cpp failed at run time
./testit: line 96: 18287 Abort trap              ./a.out
unsigned_char.pass.cpp failed at run time
./testit: line 96: 18294 Abort trap              ./a.out
unsigned_char_pointer.pass.cpp failed at run time
./testit: line 96: 18301 Abort trap              ./a.out
wchar_t_pointer.pass.cpp failed at run time
failed 10 tests in /test/input.output/iostream.format/input.streams/istream.formatted/istream::extractors
./testit: line 96: 18312 Abort trap              ./a.out
ws.pass.cpp failed at run time
failed 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
./testit: line 96: 18334 Abort trap              ./a.out
get.pass.cpp failed at run time
./testit: line 96: 18342 Abort trap              ./a.out
get_chart.pass.cpp failed at run time
./testit: line 96: 18349 Abort trap              ./a.out
get_pointer_size.pass.cpp failed at run time
./testit: line 96: 18356 Abort trap              ./a.out
get_pointer_size_chart.pass.cpp failed at run time
./testit: line 96: 18363 Abort trap              ./a.out
get_streambuf.pass.cpp failed at run time
./testit: line 96: 18370 Abort trap              ./a.out
get_streambuf_chart.pass.cpp failed at run time
./testit: line 96: 18377 Abort trap              ./a.out
getline_pointer_size.pass.cpp failed at run time
./testit: line 96: 18384 Abort trap              ./a.out
getline_pointer_size_chart.pass.cpp failed at run time
./testit: line 96: 18392 Abort trap              ./a.out
ignore.pass.cpp failed at run time
./testit: line 96: 18399 Abort trap              ./a.out
peek.pass.cpp failed at run time
./testit: line 96: 18406 Abort trap              ./a.out
putback.pass.cpp failed at run time
./testit: line 96: 18413 Abort trap              ./a.out
read.pass.cpp failed at run time
./testit: line 96: 18420 Abort trap              ./a.out
readsome.pass.cpp failed at run time
./testit: line 96: 18427 Abort trap              ./a.out
seekg.pass.cpp failed at run time
./testit: line 96: 18434 Abort trap              ./a.out
seekg_off.pass.cpp failed at run time
./testit: line 96: 18441 Abort trap              ./a.out
sync.pass.cpp failed at run time
./testit: line 96: 18448 Abort trap              ./a.out
tellg.pass.cpp failed at run time
./testit: line 96: 18455 Abort trap              ./a.out
unget.pass.cpp failed at run time
failed 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
./testit: line 96: 18488 Abort trap              ./a.out
member_swap.pass.cpp failed at run time
failed 1 tests in /test/input.output/iostream.format/output.streams/ostream.assign
passed 1 tests in /test/input.output/iostream.format/output.streams/ostream.assign
./testit: line 96: 18514 Abort trap              ./a.out
streambuf.pass.cpp failed at run time
failed 1 tests in /test/input.output/iostream.format/output.streams/ostream.cons
passed 1 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
./testit: line 96: 18549 Abort trap              ./a.out
basic_ios.pass.cpp failed at run time
./testit: line 96: 18556 Abort trap              ./a.out
ios_base.pass.cpp failed at run time
./testit: line 96: 18563 Abort trap              ./a.out
ostream.pass.cpp failed at run time
./testit: line 96: 18570 Abort trap              ./a.out
streambuf.pass.cpp failed at run time
failed 4 tests in /test/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters
./testit: line 96: 18581 Abort trap              ./a.out
bool.pass.cpp failed at run time
./testit: line 96: 18588 Abort trap              ./a.out
double.pass.cpp failed at run time
./testit: line 96: 18595 Abort trap              ./a.out
float.pass.cpp failed at run time
./testit: line 96: 18602 Abort trap              ./a.out
int.pass.cpp failed at run time
./testit: line 96: 18609 Abort trap              ./a.out
long.pass.cpp failed at run time
./testit: line 96: 18616 Abort trap              ./a.out
long_double.pass.cpp failed at run time
./testit: line 96: 18623 Abort trap              ./a.out
long_long.pass.cpp failed at run time
./testit: line 96: 18630 Abort trap              ./a.out
pointer.pass.cpp failed at run time
./testit: line 96: 18637 Abort trap              ./a.out
short.pass.cpp failed at run time
./testit: line 96: 18644 Abort trap              ./a.out
unsigned_int.pass.cpp failed at run time
./testit: line 96: 18651 Abort trap              ./a.out
unsigned_long.pass.cpp failed at run time
./testit: line 96: 18658 Abort trap              ./a.out
unsigned_long_long.pass.cpp failed at run time
./testit: line 96: 18665 Abort trap              ./a.out
unsigned_short.pass.cpp failed at run time
failed 13 tests in /test/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic
./testit: line 96: 18676 Abort trap              ./a.out
CharT.pass.cpp failed at run time
./testit: line 96: 18683 Abort trap              ./a.out
CharT_pointer.pass.cpp failed at run time
./testit: line 96: 18690 Abort trap              ./a.out
char.pass.cpp failed at run time
./testit: line 96: 18698 Abort trap              ./a.out
char_pointer.pass.cpp failed at run time
./testit: line 96: 18705 Abort trap              ./a.out
char_to_wide.pass.cpp failed at run time
./testit: line 96: 18712 Abort trap              ./a.out
char_to_wide_pointer.pass.cpp failed at run time
./testit: line 96: 18719 Abort trap              ./a.out
signed_char.pass.cpp failed at run time
./testit: line 96: 18726 Abort trap              ./a.out
signed_char_pointer.pass.cpp failed at run time
./testit: line 96: 18733 Abort trap              ./a.out
unsigned_char.pass.cpp failed at run time
./testit: line 96: 18740 Abort trap              ./a.out
unsigned_char_pointer.pass.cpp failed at run time
failed 10 tests in /test/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character
./testit: line 96: 18751 Abort trap              ./a.out
endl.pass.cpp failed at run time
./testit: line 96: 18758 Abort trap              ./a.out
ends.pass.cpp failed at run time
./testit: line 96: 18765 Abort trap              ./a.out
flush.pass.cpp failed at run time
failed 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
./testit: line 96: 18787 Abort trap              ./a.out
seekp.pass.cpp failed at run time
./testit: line 96: 18794 Abort trap              ./a.out
seekp2.pass.cpp failed at run time
./testit: line 96: 18801 Abort trap              ./a.out
tellp.pass.cpp failed at run time
failed 3 tests in /test/input.output/iostream.format/output.streams/ostream.seeks
./testit: line 96: 18812 Abort trap              ./a.out
flush.pass.cpp failed at run time
./testit: line 96: 18819 Abort trap              ./a.out
put.pass.cpp failed at run time
./testit: line 96: 18826 Abort trap              ./a.out
write.pass.cpp failed at run time
failed 3 tests in /test/input.output/iostream.format/output.streams/ostream.unformatted
./testit: line 96: 18837 Abort trap              ./a.out
construct.pass.cpp failed at run time
./testit: line 96: 18845 Abort trap              ./a.out
destruct.pass.cpp failed at run time
failed 2 tests in /test/input.output/iostream.format/output.streams/ostream::sentry
./testit: line 96: 18856 Abort trap              ./a.out
resetiosflags.pass.cpp failed at run time
./testit: line 96: 18863 Abort trap              ./a.out
setbase.pass.cpp failed at run time
./testit: line 96: 18870 Abort trap              ./a.out
setfill.pass.cpp failed at run time
./testit: line 96: 18877 Abort trap              ./a.out
setiosflags.pass.cpp failed at run time
./testit: line 96: 18884 Abort trap              ./a.out
setprecision.pass.cpp failed at run time
./testit: line 96: 18891 Abort trap              ./a.out
setw.pass.cpp failed at run time
failed 6 tests in /test/input.output/iostream.format/std.manip
passed 1 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
./testit: line 96: 19087 Abort trap              ./a.out
ctor_streambuf.pass.cpp failed at run time
failed 1 tests in /test/input.output/iostreams.base/ios/basic.ios.cons
./testit: line 96: 19098 Abort trap              ./a.out
copyfmt.pass.cpp failed at run time
./testit: line 96: 19105 Abort trap              ./a.out
fill.pass.cpp failed at run time
./testit: line 96: 19112 Abort trap              ./a.out
fill_char_type.pass.cpp failed at run time
./testit: line 96: 19119 Abort trap              ./a.out
imbue.pass.cpp failed at run time
./testit: line 96: 19126 Bus error               ./a.out
move.pass.cpp failed at run time
./testit: line 96: 19133 Abort trap              ./a.out
narow.pass.cpp failed at run time
./testit: line 96: 19140 Abort trap              ./a.out
rdbuf.pass.cpp failed at run time
./testit: line 96: 19147 Abort trap              ./a.out
rdbuf_streambuf.pass.cpp failed at run time
./testit: line 96: 19154 Abort trap              ./a.out
set_rdbuf.pass.cpp failed at run time
./testit: line 96: 19161 Abort trap              ./a.out
swap.pass.cpp failed at run time
./testit: line 96: 19171 Abort trap              ./a.out
tie.pass.cpp failed at run time
./testit: line 96: 19180 Abort trap              ./a.out
tie_ostream.pass.cpp failed at run time
./testit: line 96: 19190 Abort trap              ./a.out
widen.pass.cpp failed at run time
failed 13 tests in /test/input.output/iostreams.base/ios/basic.ios.members
./testit: line 96: 19201 Abort trap              ./a.out
bad.pass.cpp failed at run time
./testit: line 96: 19208 Abort trap              ./a.out
bool.pass.cpp failed at run time
./testit: line 96: 19215 Abort trap              ./a.out
clear.pass.cpp failed at run time
./testit: line 96: 19222 Abort trap              ./a.out
eof.pass.cpp failed at run time
./testit: line 96: 19229 Abort trap              ./a.out
exceptions.pass.cpp failed at run time
./testit: line 96: 19236 Abort trap              ./a.out
exceptions_iostate.pass.cpp failed at run time
./testit: line 96: 19243 Abort trap              ./a.out
fail.pass.cpp failed at run time
./testit: line 96: 19250 Abort trap              ./a.out
good.pass.cpp failed at run time
./testit: line 96: 19257 Abort trap              ./a.out
not.pass.cpp failed at run time
./testit: line 96: 19264 Abort trap              ./a.out
rdstate.pass.cpp failed at run time
./testit: line 96: 19273 Abort trap              ./a.out
setstate.pass.cpp failed at run time
failed 11 tests in /test/input.output/iostreams.base/ios/iostate.flags
passed 1 tests in /test/input.output/iostreams.base/ios.base
./testit: line 96: 19297 Abort trap              ./a.out
flags.pass.cpp failed at run time
./testit: line 96: 19304 Abort trap              ./a.out
flags_fmtflags.pass.cpp failed at run time
./testit: line 96: 19312 Abort trap              ./a.out
precision.pass.cpp failed at run time
./testit: line 96: 19320 Abort trap              ./a.out
precision_streamsize.pass.cpp failed at run time
./testit: line 96: 19327 Abort trap              ./a.out
setf_fmtflags.pass.cpp failed at run time
./testit: line 96: 19335 Abort trap              ./a.out
setf_fmtflags_mask.pass.cpp failed at run time
./testit: line 96: 19342 Abort trap              ./a.out
unsetf_mask.pass.cpp failed at run time
./testit: line 96: 19349 Abort trap              ./a.out
width.pass.cpp failed at run time
./testit: line 96: 19356 Abort trap              ./a.out
width_streamsize.pass.cpp failed at run time
failed 9 tests in /test/input.output/iostreams.base/ios.base/fmtflags.state
./testit: line 96: 19369 Abort trap              ./a.out
register_callback.pass.cpp failed at run time
failed 1 tests in /test/input.output/iostreams.base/ios.base/ios.base.callback
./testit: line 96: 19380 Abort trap              ./a.out
dtor.pass.cpp failed at run time
failed 1 tests in /test/input.output/iostreams.base/ios.base/ios.base.cons
./testit: line 96: 19391 Abort trap              ./a.out
getloc.pass.cpp failed at run time
./testit: line 96: 19398 Abort trap              ./a.out
imbue.pass.cpp failed at run time
failed 2 tests in /test/input.output/iostreams.base/ios.base/ios.base.locales
./testit: line 96: 19409 Abort trap              ./a.out
iword.pass.cpp failed at run time
./testit: line 96: 19418 Abort trap              ./a.out
pword.pass.cpp failed at run time
failed 2 tests in /test/input.output/iostreams.base/ios.base/ios.base.storage
passed 1 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
./testit: line 96: 19544 Abort trap              ./a.out
internal.pass.cpp failed at run time
./testit: line 96: 19551 Abort trap              ./a.out
left.pass.cpp failed at run time
./testit: line 96: 19558 Abort trap              ./a.out
right.pass.cpp failed at run time
failed 3 tests in /test/input.output/iostreams.base/std.ios.manip/adjustfield.manip
./testit: line 96: 19571 Abort trap              ./a.out
dec.pass.cpp failed at run time
./testit: line 96: 19578 Abort trap              ./a.out
hex.pass.cpp failed at run time
./testit: line 96: 19585 Abort trap              ./a.out
oct.pass.cpp failed at run time
failed 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
./testit: line 96: 19621 Abort trap              ./a.out
defaultfloat.pass.cpp failed at run time
./testit: line 96: 19628 Abort trap              ./a.out
fixed.pass.cpp failed at run time
./testit: line 96: 19635 Abort trap              ./a.out
hexfloat.pass.cpp failed at run time
./testit: line 96: 19642 Abort trap              ./a.out
scientific.pass.cpp failed at run time
failed 4 tests in /test/input.output/iostreams.base/std.ios.manip/floatfield.manip
./testit: line 96: 19653 Abort trap              ./a.out
boolalpha.pass.cpp failed at run time
./testit: line 96: 19660 Abort trap              ./a.out
noboolalpha.pass.cpp failed at run time
./testit: line 96: 19667 Abort trap              ./a.out
noshowbase.pass.cpp failed at run time
./testit: line 96: 19674 Abort trap              ./a.out
noshowpoint.pass.cpp failed at run time
./testit: line 96: 19681 Abort trap              ./a.out
noshowpos.pass.cpp failed at run time
./testit: line 96: 19688 Abort trap              ./a.out
noskipws.pass.cpp failed at run time
./testit: line 96: 19695 Abort trap              ./a.out
nounitbuf.pass.cpp failed at run time
./testit: line 96: 19702 Abort trap              ./a.out
nouppercase.pass.cpp failed at run time
./testit: line 96: 19709 Abort trap              ./a.out
showbase.pass.cpp failed at run time
./testit: line 96: 19716 Abort trap              ./a.out
showpoint.pass.cpp failed at run time
./testit: line 96: 19723 Abort trap              ./a.out
showpos.pass.cpp failed at run time
./testit: line 96: 19730 Abort trap              ./a.out
skipws.pass.cpp failed at run time
./testit: line 96: 19737 Abort trap              ./a.out
unitbuf.pass.cpp failed at run time
./testit: line 96: 19744 Abort trap              ./a.out
uppercase.pass.cpp failed at run time
failed 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
./testit: line 96: 20189 Abort trap              ./a.out
member_swap.pass.cpp failed at run time
./testit: line 96: 20204 Abort trap              ./a.out
nonmember_swap.pass.cpp failed at run time
failed 2 tests in /test/input.output/string.streams/istringstream/istringstream.assign
passed 1 tests in /test/input.output/string.streams/istringstream/istringstream.assign
./testit: line 96: 20216 Abort trap              ./a.out
default.pass.cpp failed at run time
./testit: line 96: 20230 Abort trap              ./a.out
string.pass.cpp failed at run time
failed 2 tests in /test/input.output/string.streams/istringstream/istringstream.cons
passed 1 tests in /test/input.output/string.streams/istringstream/istringstream.cons
./testit: line 96: 20242 Abort trap              ./a.out
str.pass.cpp failed at run time
failed 1 tests in /test/input.output/string.streams/istringstream/istringstream.members
passed 1 tests in /test/input.output/string.streams/ostringstream
./testit: line 96: 20264 Abort trap              ./a.out
member_swap.pass.cpp failed at run time
./testit: line 96: 20278 Abort trap              ./a.out
nonmember_swap.pass.cpp failed at run time
failed 2 tests in /test/input.output/string.streams/ostringstream/ostringstream.assign
passed 1 tests in /test/input.output/string.streams/ostringstream/ostringstream.assign
./testit: line 96: 20290 Abort trap              ./a.out
default.pass.cpp failed at run time
./testit: line 96: 20304 Abort trap              ./a.out
string.pass.cpp failed at run time
failed 2 tests in /test/input.output/string.streams/ostringstream/ostringstream.cons
passed 1 tests in /test/input.output/string.streams/ostringstream/ostringstream.cons
./testit: line 96: 20316 Abort trap              ./a.out
str.pass.cpp failed at run time
failed 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
./testit: line 96: 20461 Abort trap              ./a.out
default.pass.cpp failed at run time
./testit: line 96: 20476 Abort trap              ./a.out
string.pass.cpp failed at run time
failed 2 tests in /test/input.output/string.streams/stringstream.cons
passed 1 tests in /test/input.output/string.streams/stringstream.cons
./testit: line 96: 20488 Abort trap              ./a.out
member_swap.pass.cpp failed at run time
./testit: line 96: 20502 Abort trap              ./a.out
nonmember_swap.pass.cpp failed at run time
failed 2 tests in /test/input.output/string.streams/stringstream.cons/stringstream.assign
passed 1 tests in /test/input.output/string.streams/stringstream.cons/stringstream.assign
./testit: line 96: 20514 Abort trap              ./a.out
str.pass.cpp failed at run time
failed 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/__yuga_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/__yuga_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/__yuga_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/__yuga_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
./testit: line 96: 21672 Abort trap              ./a.out
copy.pass.cpp failed at run time
./testit: line 96: 21686 Abort trap              ./a.out
istream.pass.cpp failed at run time
failed 2 tests in /test/iterators/stream.iterators/istream.iterator/istream.iterator.cons
passed 1 tests in /test/iterators/stream.iterators/istream.iterator/istream.iterator.cons
./testit: line 96: 21698 Abort trap              ./a.out
arrow.pass.cpp failed at run time
./testit: line 96: 21705 Abort trap              ./a.out
dereference.pass.cpp failed at run time
./testit: line 96: 21712 Abort trap              ./a.out
equal.pass.cpp failed at run time
./testit: line 96: 21719 Abort trap              ./a.out
post_increment.pass.cpp failed at run time
./testit: line 96: 21726 Abort trap              ./a.out
pre_increment.pass.cpp failed at run time
failed 5 tests in /test/iterators/stream.iterators/istream.iterator/istream.iterator.ops
passed 1 tests in /test/iterators/stream.iterators/istreambuf.iterator
./testit: line 96: 21756 Abort trap              ./a.out
istream.pass.cpp failed at run time
./testit: line 96: 21763 Abort trap              ./a.out
proxy.pass.cpp failed at run time
./testit: line 96: 21770 Abort trap              ./a.out
streambuf.pass.cpp failed at run time
failed 3 tests in /test/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons
passed 1 tests in /test/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons
./testit: line 96: 21782 Abort trap              ./a.out
equal.pass.cpp failed at run time
failed 1 tests in /test/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator::equal
./testit: line 96: 21793 Abort trap              ./a.out
not_equal.pass.cpp failed at run time
failed 1 tests in /test/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator::op!=
./testit: line 96: 21804 Abort trap              ./a.out
dereference.pass.cpp failed at run time
failed 1 tests in /test/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator::op++
./testit: line 96: 21815 Abort trap              ./a.out
equal.pass.cpp failed at run time
failed 1 tests in /test/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator::op==
./testit: line 96: 21826 Abort trap              ./a.out
arrow.pass.cpp failed at run time
./testit: line 96: 21833 Abort trap              ./a.out
post_increment.pass.cpp failed at run time
./testit: line 96: 21840 Abort trap              ./a.out
pre_increment.pass.cpp failed at run time
failed 3 tests in /test/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator::op_astrk
./testit: line 96: 21851 Abort trap              ./a.out
proxy.pass.cpp failed at run time
failed 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
./testit: line 96: 21919 Abort trap              ./a.out
copy.pass.cpp failed at run time
./testit: line 96: 21926 Abort trap              ./a.out
ostream.pass.cpp failed at run time
./testit: line 96: 21933 Abort trap              ./a.out
ostream_delem.pass.cpp failed at run time
failed 3 tests in /test/iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des
./testit: line 96: 21944 Abort trap              ./a.out
assign_t.pass.cpp failed at run time
./testit: line 96: 21952 Abort trap              ./a.out
dereference.pass.cpp failed at run time
./testit: line 96: 21959 Abort trap              ./a.out
increment.pass.cpp failed at run time
failed 3 tests in /test/iterators/stream.iterators/ostream.iterator/ostream.iterator.ops
passed 1 tests in /test/iterators/stream.iterators/ostreambuf.iterator
./testit: line 96: 21981 Abort trap              ./a.out
ostream.pass.cpp failed at run time
./testit: line 96: 21988 Abort trap              ./a.out
streambuf.pass.cpp failed at run time
failed 2 tests in /test/iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.cons
./testit: line 96: 21999 Abort trap              ./a.out
assign_c.pass.cpp failed at run time
./testit: line 96: 22006 Abort trap              ./a.out
deref.pass.cpp failed at run time
./testit: line 96: 22020 Abort trap              ./a.out
increment.pass.cpp failed at run time
failed 3 tests in /test/iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops
passed 1 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
Assertion failed: (A::constructed == 0), function main, file current_exception.pass.cpp, line 59.
./testit: line 96: 22359 Abort trap              ./a.out
current_exception.pass.cpp failed at run time
Assertion failed: (A::constructed == 0), function main, file make_exception_ptr.pass.cpp, line 61.
./testit: line 96: 22373 Abort trap              ./a.out
make_exception_ptr.pass.cpp failed at run time
Assertion failed: (A::constructed == 0), function main, file rethrow_exception.pass.cpp, line 69.
./testit: line 96: 22380 Abort trap              ./a.out
rethrow_exception.pass.cpp failed at run time
failed 3 tests in /test/language.support/support.exception/propagation
passed 1 tests in /test/language.support/support.exception/propagation
passed 1 tests in /test/language.support/support.exception/uncaught
not implemented:  /test/language.support/support.general
passed 1 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 2 tests in /test/language.support/support.limits/c.limits
passed 1 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 6 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 6 tests in /test/language.support/support.types
passed 1 tests in /test/localization
passed 1 tests in /test/localization/c.locales
./testit: line 96: 22918 Abort trap              ./a.out
__scan_keyword.pass.cpp failed at run time
failed 1 tests in /test/localization/locale.categories
passed 1 tests in /test/localization/locale.categories/category.collate
Assertion failed: (std::has_facet<std::collate<char> >(l)), function main, file types.pass.cpp, line 44.
./testit: line 96: 22947 Abort trap              ./a.out
types.pass.cpp failed at run time
failed 1 tests in /test/localization/locale.categories/category.collate/locale.collate
passed 1 tests in /test/localization/locale.categories/category.collate/locale.collate
./testit: line 96: 22959 Abort trap              ./a.out
compare.pass.cpp failed at run time
./testit: line 96: 22966 Abort trap              ./a.out
hash.pass.cpp failed at run time
./testit: line 96: 22973 Abort trap              ./a.out
transform.pass.cpp failed at run time
failed 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
Assertion failed: (std::has_facet<std::ctype<char> >(l)), function main, file types.pass.cpp, line 43.
./testit: line 96: 23038 Abort trap              ./a.out
types.pass.cpp failed at run time
failed 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
./testit: line 96: 23067 Abort trap              ./a.out
is_1.pass.cpp failed at run time
./testit: line 96: 23074 Abort trap              ./a.out
is_many.pass.cpp failed at run time
./testit: line 96: 23081 Abort trap              ./a.out
narrow_1.pass.cpp failed at run time
./testit: line 96: 23088 Abort trap              ./a.out
narrow_many.pass.cpp failed at run time
./testit: line 96: 23095 Abort trap              ./a.out
scan_is.pass.cpp failed at run time
./testit: line 96: 23102 Abort trap              ./a.out
scan_not.pass.cpp failed at run time
./testit: line 96: 23116 Abort trap              ./a.out
tolower_1.pass.cpp failed at run time
./testit: line 96: 23123 Abort trap              ./a.out
tolower_many.pass.cpp failed at run time
./testit: line 96: 23130 Abort trap              ./a.out
toupper_1.pass.cpp failed at run time
./testit: line 96: 23137 Abort trap              ./a.out
toupper_many.pass.cpp failed at run time
./testit: line 96: 23144 Abort trap              ./a.out
widen_1.pass.cpp failed at run time
./testit: line 96: 23151 Abort trap              ./a.out
widen_many.pass.cpp failed at run time
failed 12 tests in /test/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members
passed 2 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
Assertion failed: (std::has_facet<F>(l)), function main, file types_char.pass.cpp, line 51.
./testit: line 96: 23220 Abort trap              ./a.out
types_char.pass.cpp failed at run time
Assertion failed: (std::has_facet<F>(l)), function main, file types_char16_t.pass.cpp, line 52.
./testit: line 96: 23227 Abort trap              ./a.out
types_char16_t.pass.cpp failed at run time
Assertion failed: (std::has_facet<F>(l)), function main, file types_char32_t.pass.cpp, line 52.
./testit: line 96: 23234 Abort trap              ./a.out
types_char32_t.pass.cpp failed at run time
Assertion failed: (std::has_facet<F>(l)), function main, file types_wchar_t.pass.cpp, line 51.
./testit: line 96: 23241 Abort trap              ./a.out
types_wchar_t.pass.cpp failed at run time
failed 4 tests in /test/localization/locale.categories/category.ctype/locale.codecvt
passed 5 tests in /test/localization/locale.categories/category.ctype/locale.codecvt
./testit: line 96: 23253 Abort trap              ./a.out
char16_t_always_noconv.pass.cpp failed at run time
./testit: line 96: 23260 Abort trap              ./a.out
char16_t_encoding.pass.cpp failed at run time
./testit: line 96: 23267 Abort trap              ./a.out
char16_t_in.pass.cpp failed at run time
./testit: line 96: 23274 Abort trap              ./a.out
char16_t_length.pass.cpp failed at run time
./testit: line 96: 23281 Abort trap              ./a.out
char16_t_max_length.pass.cpp failed at run time
./testit: line 96: 23288 Abort trap              ./a.out
char16_t_out.pass.cpp failed at run time
./testit: line 96: 23295 Abort trap              ./a.out
char16_t_unshift.pass.cpp failed at run time
./testit: line 96: 23302 Abort trap              ./a.out
char32_t_always_noconv.pass.cpp failed at run time
./testit: line 96: 23309 Abort trap              ./a.out
char32_t_encoding.pass.cpp failed at run time
./testit: line 96: 23316 Abort trap              ./a.out
char32_t_in.pass.cpp failed at run time
./testit: line 96: 23323 Abort trap              ./a.out
char32_t_length.pass.cpp failed at run time
./testit: line 96: 23330 Abort trap              ./a.out
char32_t_max_length.pass.cpp failed at run time
./testit: line 96: 23337 Abort trap              ./a.out
char32_t_out.pass.cpp failed at run time
./testit: line 96: 23344 Abort trap              ./a.out
char32_t_unshift.pass.cpp failed at run time
./testit: line 96: 23351 Abort trap              ./a.out
char_always_noconv.pass.cpp failed at run time
./testit: line 96: 23358 Abort trap              ./a.out
char_encoding.pass.cpp failed at run time
./testit: line 96: 23365 Abort trap              ./a.out
char_in.pass.cpp failed at run time
./testit: line 96: 23372 Abort trap              ./a.out
char_length.pass.cpp failed at run time
./testit: line 96: 23379 Abort trap              ./a.out
char_max_length.pass.cpp failed at run time
./testit: line 96: 23386 Abort trap              ./a.out
char_out.pass.cpp failed at run time
./testit: line 96: 23393 Abort trap              ./a.out
char_unshift.pass.cpp failed at run time
./testit: line 96: 23400 Abort trap              ./a.out
utf_sanity_check.pass.cpp failed at run time
./testit: line 96: 23407 Abort trap              ./a.out
wchar_t_always_noconv.pass.cpp failed at run time
./testit: line 96: 23414 Abort trap              ./a.out
wchar_t_encoding.pass.cpp failed at run time
./testit: line 96: 23421 Abort trap              ./a.out
wchar_t_in.pass.cpp failed at run time
./testit: line 96: 23428 Abort trap              ./a.out
wchar_t_length.pass.cpp failed at run time
./testit: line 96: 23435 Abort trap              ./a.out
wchar_t_max_length.pass.cpp failed at run time
./testit: line 96: 23442 Abort trap              ./a.out
wchar_t_out.pass.cpp failed at run time
./testit: line 96: 23449 Abort trap              ./a.out
wchar_t_unshift.pass.cpp failed at run time
failed 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
Assertion failed: (std::has_facet<std::ctype<wchar_t> >(l)), function main, file types.pass.cpp, line 43.
./testit: line 96: 23510 Abort trap              ./a.out
types.pass.cpp failed at run time
failed 1 tests in /test/localization/locale.categories/category.ctype/locale.ctype
passed 1 tests in /test/localization/locale.categories/category.ctype/locale.ctype
./testit: line 96: 23522 Abort trap              ./a.out
is_1.pass.cpp failed at run time
./testit: line 96: 23529 Abort trap              ./a.out
is_many.pass.cpp failed at run time
./testit: line 96: 23536 Abort trap              ./a.out
narrow_1.pass.cpp failed at run time
./testit: line 96: 23543 Abort trap              ./a.out
narrow_many.pass.cpp failed at run time
./testit: line 96: 23550 Abort trap              ./a.out
scan_is.pass.cpp failed at run time
./testit: line 96: 23557 Abort trap              ./a.out
scan_not.pass.cpp failed at run time
./testit: line 96: 23564 Abort trap              ./a.out
tolower_1.pass.cpp failed at run time
./testit: line 96: 23571 Abort trap              ./a.out
tolower_many.pass.cpp failed at run time
./testit: line 96: 23578 Abort trap              ./a.out
toupper_1.pass.cpp failed at run time
./testit: line 96: 23585 Abort trap              ./a.out
toupper_many.pass.cpp failed at run time
./testit: line 96: 23592 Abort trap              ./a.out
widen_1.pass.cpp failed at run time
./testit: line 96: 23599 Abort trap              ./a.out
widen_many.pass.cpp failed at run time
failed 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
./testit: line 96: 23815 Abort trap              ./a.out
get_long_double_en_US.pass.cpp failed at run time
./testit: line 96: 23823 Abort trap              ./a.out
get_long_double_fr_FR.pass.cpp failed at run time
./testit: line 96: 23830 Abort trap              ./a.out
get_long_double_ru_RU.pass.cpp failed at run time
./testit: line 96: 23837 Abort trap              ./a.out
get_long_double_zh_CN.pass.cpp failed at run time
./testit: line 96: 23844 Abort trap              ./a.out
get_string_en_US.pass.cpp failed at run time
failed 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
./testit: line 96: 23884 Abort trap              ./a.out
put_long_double_en_US.pass.cpp failed at run time
./testit: line 96: 23891 Abort trap              ./a.out
put_long_double_fr_FR.pass.cpp failed at run time
./testit: line 96: 23898 Abort trap              ./a.out
put_long_double_ru_RU.pass.cpp failed at run time
./testit: line 96: 23905 Abort trap              ./a.out
put_long_double_zh_CN.pass.cpp failed at run time
./testit: line 96: 23913 Abort trap              ./a.out
put_string_en_US.pass.cpp failed at run time
failed 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
./testit: line 96: 24136 Abort trap              ./a.out
put_bool.pass.cpp failed at run time
./testit: line 96: 24144 Abort trap              ./a.out
put_double.pass.cpp failed at run time
./testit: line 96: 24151 Abort trap              ./a.out
put_long.pass.cpp failed at run time
./testit: line 96: 24158 Abort trap              ./a.out
put_long_double.pass.cpp failed at run time
./testit: line 96: 24165 Abort trap              ./a.out
put_long_long.pass.cpp failed at run time
./testit: line 96: 24172 Abort trap              ./a.out
put_pointer.pass.cpp failed at run time
./testit: line 96: 24179 Abort trap              ./a.out
put_unsigned_long.pass.cpp failed at run time
./testit: line 96: 24186 Abort trap              ./a.out
put_unsigned_long_long.pass.cpp failed at run time
failed 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
./testit: line 96: 24226 Abort trap              ./a.out
get_bool.pass.cpp failed at run time
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.
./testit: line 96: 24233 Abort trap              ./a.out
get_double.pass.cpp failed at run time
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.
./testit: line 96: 24240 Abort trap              ./a.out
get_float.pass.cpp failed at run time
./testit: line 96: 24247 Abort trap              ./a.out
get_long.pass.cpp failed at run time
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.
./testit: line 96: 24254 Abort trap              ./a.out
get_long_double.pass.cpp failed at run time
./testit: line 96: 24261 Abort trap              ./a.out
get_long_long.pass.cpp failed at run time
./testit: line 96: 24268 Abort trap              ./a.out
get_pointer.pass.cpp failed at run time
./testit: line 96: 24276 Abort trap              ./a.out
get_unsigned_int.pass.cpp failed at run time
./testit: line 96: 24283 Abort trap              ./a.out
get_unsigned_long.pass.cpp failed at run time
./testit: line 96: 24290 Abort trap              ./a.out
get_unsigned_long_long.pass.cpp failed at run time
./testit: line 96: 24297 Abort trap              ./a.out
get_unsigned_short.pass.cpp failed at run time
failed 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
./testit: line 96: 24362 Abort trap              ./a.out
get_date.pass.cpp failed at run time
./testit: line 96: 24369 Abort trap              ./a.out
get_date_wide.pass.cpp failed at run time
./testit: line 96: 24376 Abort trap              ./a.out
get_many.pass.cpp failed at run time
./testit: line 96: 24384 Abort trap              ./a.out
get_monthname.pass.cpp failed at run time
./testit: line 96: 24391 Abort trap              ./a.out
get_monthname_wide.pass.cpp failed at run time
./testit: line 96: 24398 Abort trap              ./a.out
get_one.pass.cpp failed at run time
./testit: line 96: 24405 Abort trap              ./a.out
get_time.pass.cpp failed at run time
./testit: line 96: 24412 Abort trap              ./a.out
get_time_wide.pass.cpp failed at run time
./testit: line 96: 24419 Abort trap              ./a.out
get_weekday.pass.cpp failed at run time
./testit: line 96: 24426 Abort trap              ./a.out
get_weekday_wide.pass.cpp failed at run time
./testit: line 96: 24433 Abort trap              ./a.out
get_year.pass.cpp failed at run time
failed 11 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.members
passed 1 tests in /test/localization/locale.categories/category.time/locale.time.get/locale.time.get.virtuals
./testit: line 96: 24470 Abort trap              ./a.out
get_date.pass.cpp failed at run time
./testit: line 96: 24477 Abort trap              ./a.out
get_date_wide.pass.cpp failed at run time
./testit: line 96: 24484 Abort trap              ./a.out
get_monthname.pass.cpp failed at run time
./testit: line 96: 24491 Abort trap              ./a.out
get_monthname_wide.pass.cpp failed at run time
./testit: line 96: 24498 Abort trap              ./a.out
get_one.pass.cpp failed at run time
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.
./testit: line 96: 24505 Abort trap              ./a.out
get_one_wide.pass.cpp failed at run time
./testit: line 96: 24512 Abort trap              ./a.out
get_time.pass.cpp failed at run time
./testit: line 96: 24519 Abort trap              ./a.out
get_time_wide.pass.cpp failed at run time
./testit: line 96: 24526 Abort trap              ./a.out
get_weekday.pass.cpp failed at run time
./testit: line 96: 24533 Abort trap              ./a.out
get_weekday_wide.pass.cpp failed at run time
./testit: line 96: 24540 Abort trap              ./a.out
get_year.pass.cpp failed at run time
./testit: line 96: 24547 Abort trap              ./a.out
get_year_wide.pass.cpp failed at run time
failed 12 tests in /test/localization/locale.categories/category.time/locale.time.get.byname
passed 2 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
./testit: line 96: 24577 Abort trap              ./a.out
put1.pass.cpp failed at run time
./testit: line 96: 24584 Abort trap              ./a.out
put2.pass.cpp failed at run time
failed 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
./testit: line 96: 24606 Abort trap              ./a.out
put1.pass.cpp failed at run time
failed 1 tests in /test/localization/locale.categories/category.time/locale.time.put.byname
passed 1 tests in /test/localization/locale.categories/facet.numpunct
Assertion failed: (std::has_facet<std::numpunct<char> >(l)), function main, file types.pass.cpp, line 43.
./testit: line 96: 24635 Abort trap              ./a.out
types.pass.cpp failed at run time
failed 1 tests in /test/localization/locale.categories/facet.numpunct/locale.numpunct
passed 1 tests in /test/localization/locale.categories/facet.numpunct/locale.numpunct
./testit: line 96: 24647 Abort trap              ./a.out
decimal_point.pass.cpp failed at run time
./testit: line 96: 24654 Abort trap              ./a.out
falsename.pass.cpp failed at run time
./testit: line 96: 24661 Abort trap              ./a.out
grouping.pass.cpp failed at run time
./testit: line 96: 24668 Abort trap              ./a.out
thousands_sep.pass.cpp failed at run time
./testit: line 96: 24675 Abort trap              ./a.out
truename.pass.cpp failed at run time
failed 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: ((std::has_facet<std::money_get<char> >(loc))), function check, file assign.pass.cpp, line 60.
./testit: line 96: 24769 Abort trap              ./a.out
assign.pass.cpp failed at run time
Assertion failed: ((std::has_facet<std::money_get<char> >(loc))), function check, file char_pointer.pass.cpp, line 60.
./testit: line 96: 24776 Abort trap              ./a.out
char_pointer.pass.cpp failed at run time
Assertion failed: ((std::has_facet<std::money_get<char> >(loc))), function check, file copy.pass.cpp, line 60.
./testit: line 96: 24783 Abort trap              ./a.out
copy.pass.cpp failed at run time
Assertion failed: (std::has_facet<std::collate<char> >(loc)), function check, file default.pass.cpp, line 48.
./testit: line 96: 24790 Abort trap              ./a.out
default.pass.cpp failed at run time
Assertion failed: ((std::has_facet<std::money_get<char> >(loc))), function check, file locale_char_pointer_cat.pass.cpp, line 60.
./testit: line 96: 24797 Abort trap              ./a.out
locale_char_pointer_cat.pass.cpp failed at run time
Assertion failed: ((std::has_facet<std::money_get<char> >(loc))), function check, file locale_facetptr.pass.cpp, line 60.
./testit: line 96: 24804 Abort trap              ./a.out
locale_facetptr.pass.cpp failed at run time
Assertion failed: ((std::has_facet<std::money_get<char> >(loc))), function check, file locale_locale_cat.pass.cpp, line 60.
./testit: line 96: 24811 Abort trap              ./a.out
locale_locale_cat.pass.cpp failed at run time
Assertion failed: ((std::has_facet<std::money_get<char> >(loc))), function check, file locale_string_cat.pass.cpp, line 60.
./testit: line 96: 24818 Abort trap              ./a.out
locale_string_cat.pass.cpp failed at run time
Assertion failed: ((std::has_facet<std::money_get<char> >(loc))), function check, file string.pass.cpp, line 60.
./testit: line 96: 24825 Abort trap              ./a.out
string.pass.cpp failed at run time
failed 9 tests in /test/localization/locales/locale/locale.cons
Assertion failed: (std::has_facet<std::collate<char> >(loc)), function check, file combine.pass.cpp, line 48.
./testit: line 96: 24836 Abort trap              ./a.out
combine.pass.cpp failed at run time
failed 1 tests in /test/localization/locales/locale/locale.members
passed 1 tests in /test/localization/locales/locale/locale.members
./testit: line 96: 24855 Abort trap              ./a.out
compare.pass.cpp failed at run time
./testit: line 96: 24862 Abort trap              ./a.out
eq.pass.cpp failed at run time
failed 2 tests in /test/localization/locales/locale/locale.operators
Assertion failed: (std::has_facet<std::collate<char> >(loc)), function check, file classic.pass.cpp, line 33.
./testit: line 96: 24873 Abort trap              ./a.out
classic.pass.cpp failed at run time
Assertion failed: (std::has_facet<std::collate<char> >(loc)), function check, file global.pass.cpp, line 33.
./testit: line 96: 24880 Abort trap              ./a.out
global.pass.cpp failed at run time
failed 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
./testit: line 96: 24946 Abort trap              ./a.out
isalnum.pass.cpp failed at run time
./testit: line 96: 24953 Abort trap              ./a.out
isalpha.pass.cpp failed at run time
./testit: line 96: 24960 Abort trap              ./a.out
iscntrl.pass.cpp failed at run time
./testit: line 96: 24967 Abort trap              ./a.out
isdigit.pass.cpp failed at run time
./testit: line 96: 24974 Abort trap              ./a.out
isgraph.pass.cpp failed at run time
./testit: line 96: 24981 Abort trap              ./a.out
islower.pass.cpp failed at run time
./testit: line 96: 24988 Abort trap              ./a.out
isprint.pass.cpp failed at run time
./testit: line 96: 24995 Abort trap              ./a.out
ispunct.pass.cpp failed at run time
./testit: line 96: 25002 Abort trap              ./a.out
isspace.pass.cpp failed at run time
./testit: line 96: 25009 Abort trap              ./a.out
isupper.pass.cpp failed at run time
./testit: line 96: 25016 Abort trap              ./a.out
isxdigit.pass.cpp failed at run time
failed 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
./testit: line 96: 25041 Abort trap              ./a.out
tolower.pass.cpp failed at run time
./testit: line 96: 25048 Abort trap              ./a.out
toupper.pass.cpp failed at run time
failed 2 tests in /test/localization/locales/locale.convenience/conversions/conversions.character
not implemented:  /test/localization/locales/locale.convenience/conversions/conversions.string
Assertion failed: (std::has_facet<std::ctype<char> >(loc)), function main, file has_facet.pass.cpp, line 42.
./testit: line 96: 25062 Abort trap              ./a.out
has_facet.pass.cpp failed at run time
failed 1 tests in /test/localization/locales/locale.global.templates
passed 1 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.
tgmath_h.pass.cpp:26:2: error: #error <tgmath.h> is not implemented
#error <tgmath.h> is not implemented
 ^
1 error generated.
tgmath_h.pass.cpp failed to compile
failed 1 tests in /test/numerics/c.math
passed 2 tests in /test/numerics/c.math
passed 1 tests in /test/numerics/cfenv
passed 1 tests in /test/numerics/cfenv/cfenv.syn
passed 1 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
./testit: line 96: 25450 Abort trap              ./a.out
stream_input.pass.cpp failed at run time
./testit: line 96: 25458 Abort trap              ./a.out
stream_output.pass.cpp failed at run time
failed 2 tests in /test/numerics/complex.number/complex.ops
passed 20 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
./testit: line 96: 28048 Abort trap              ./a.out
acos_valarray.pass.cpp failed at run time
./testit: line 96: 28060 Abort trap              ./a.out
asin_valarray.pass.cpp failed at run time
./testit: line 96: 28067 Abort trap              ./a.out
atan2_valarray_valarray.pass.cpp failed at run time
./testit: line 96: 28074 Abort trap              ./a.out
atan2_valarray_value.pass.cpp failed at run time
./testit: line 96: 28081 Abort trap              ./a.out
atan2_value_valarray.pass.cpp failed at run time
./testit: line 96: 28104 Abort trap              ./a.out
atan_valarray.pass.cpp failed at run time
./testit: line 96: 28134 Abort trap              ./a.out
cos_valarray.pass.cpp failed at run time
./testit: line 96: 28162 Abort trap              ./a.out
cosh_valarray.pass.cpp failed at run time
./testit: line 96: 28185 Abort trap              ./a.out
exp_valarray.pass.cpp failed at run time
./testit: line 96: 28215 Abort trap              ./a.out
log10_valarray.pass.cpp failed at run time
./testit: line 96: 28247 Abort trap              ./a.out
log_valarray.pass.cpp failed at run time
./testit: line 96: 28279 Abort trap              ./a.out
pow_valarray_valarray.pass.cpp failed at run time
./testit: line 96: 28304 Abort trap              ./a.out
pow_valarray_value.pass.cpp failed at run time
./testit: line 96: 28322 Abort trap              ./a.out
pow_value_valarray.pass.cpp failed at run time
./testit: line 96: 28329 Abort trap              ./a.out
sin_valarray.pass.cpp failed at run time
./testit: line 96: 28336 Abort trap              ./a.out
sinh_valarray.pass.cpp failed at run time
./testit: line 96: 28350 Abort trap              ./a.out
sqrt_valarray.pass.cpp failed at run time
./testit: line 96: 28357 Abort trap              ./a.out
tan_valarray.pass.cpp failed at run time
./testit: line 96: 28375 Abort trap              ./a.out
tanh_valarray.pass.cpp failed at run time
failed 19 tests in /test/numerics/numarray/valarray.nonmembers/valarray.transcend
passed 1 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
not implemented:  /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
./testit: line 96: 31353 Abort trap              ./a.out
get_line.pass.cpp failed at run time
./testit: line 96: 31386 Abort trap              ./a.out
get_line_delim.pass.cpp failed at run time
./testit: line 96: 31435 Abort trap              ./a.out
stream_extract.pass.cpp failed at run time
./testit: line 96: 31461 Abort trap              ./a.out
stream_insert.pass.cpp failed at run time
failed 4 tests in /test/strings/basic.string/string.nonmembers/string.io
passed 2 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
failed 1 tests in /test/strings/c.strings
passed 4 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 1 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
./testit: line 96: 34578 Abort trap              ./a.out
stream.pass.cpp failed at run time
failed 1 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.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:1295:13: error: type 'functor4' does not provide a call operator
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1295:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../include/type_traits:1321: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::__yuga_base_of<std::binary_function<char, int, double>, std::reference_wrapper<functor4>, 1, 1, 0>' requested here
    : public __yuga_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::__yuga_base_of<std::binary_function<char, int, double>, std::reference_wrapper<functor4>, 1, 1, 0>' requested here
    : public __yuga_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:1295:13: error: too few arguments to function call
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1295:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../include/type_traits:1321: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::__yuga_base_of<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int)>, 1, 1, 0>' requested here
    : public __yuga_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::__yuga_base_of<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int)>, 1, 1, 0>' requested here
    : public __yuga_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:1295:13: error: too few arguments to function call
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1295:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../include/type_traits:1321: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::__yuga_base_of<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int, int)>, 1, 1, 0>' requested here
    : public __yuga_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::__yuga_base_of<std::binary_function<int, int, float>, std::reference_wrapper<float (*)(int, int)>, 1, 1, 0>' requested here
    : public __yuga_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:1295:13: error: type 'C' does not provide a call operator
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1295:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../include/type_traits:1321: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:1295:13: error: too few arguments to function call
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1295:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../include/type_traits:1321: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:1295:13: error: type 'functor4' does not provide a call operator
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1295:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../include/type_traits:1321: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::__yuga_base_of<std::unary_function<int, int>, std::reference_wrapper<functor4>, 1, 1, 0>' requested here
    : public __yuga_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::__yuga_base_of<std::unary_function<int, int>, std::reference_wrapper<functor4>, 1, 1, 0>' requested here
    : public __yuga_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:1295:13: error: too few arguments to function call
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1295:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../include/type_traits:1321: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::__yuga_base_of<std::unary_function<int, float>, std::reference_wrapper<float (*)(int)>, 1, 1, 0>' requested here
    : public __yuga_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::__yuga_base_of<std::unary_function<int, float>, std::reference_wrapper<float (*)(int)>, 1, 1, 0>' requested here
    : public __yuga_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:1295:13: error: too few arguments to function call
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1295:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../include/type_traits:1321: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::__yuga_base_of<std::unary_function<int, float>, std::reference_wrapper<float (*)(int, int)>, 1, 1, 0>' requested here
    : public __yuga_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::__yuga_base_of<std::unary_function<int, float>, std::reference_wrapper<float (*)(int, int)>, 1, 1, 0>' requested here
    : public __yuga_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:1295:13: error: too few arguments to function call
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1295:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../include/type_traits:1321: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:1295:13: error: type 'functor4' does not provide a call operator
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1295:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../include/type_traits:1321: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:1295:13: error: type 'C' does not provide a call operator
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../include/type_traits:1295:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../include/type_traits:1321: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:1295:13: error: too few arguments to function call
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1295:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../../include/type_traits:1321: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:1295:13: error: no matching function for call to object of type 'A_void_1'
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1295:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../../include/type_traits:1321: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:1295:13: error: too few arguments to function call
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1295:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../../include/type_traits:1321: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:1295:13: error: no matching function for call to object of type 'A_int_1'
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1295:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../../include/type_traits:1321: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:1295:13: error: too few arguments to function call
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1295:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../../include/type_traits:1321: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:1295:13: error: no matching function for call to object of type 'A_void_2'
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1295:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../../include/type_traits:1321: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:1295:13: error: too few arguments to function call
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1295:37: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ~~~~~~~~~~~~~~ ^
../../../../../include/type_traits:1321: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:1295:13: error: no matching function for call to object of type 'A_int_2'
    typedef decltype(declval<_Fn>()()) type;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../../include/type_traits:1295:22: note: instantiated from:
    typedef decltype(declval<_Fn>()()) type;
                     ^~~~~~~~~~~~~~
../../../../../include/type_traits:1321: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:41: error: calling a private constructor of class 'std::unique_ptr<A [], Deleter<A []> >'
    std::unique_ptr<A[], Deleter<A[]> > s1(new A[4], Deleter<A[]>(5));
                                        ^
In file included from move01.pass.cpp:33:
../../../../../include/memory:2432:9: note: declared private here
        unique_ptr(_Up __u,
        ^
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:41: error: calling a private constructor of class 'std::unique_ptr<A [], Deleter<A []> >'
    std::unique_ptr<A[], Deleter<A[]> > s(new A[3], Deleter<A[]>(5));
                                        ^
In file included from move01.pass.cpp:33:
../../../../../../include/memory:2432:9: note: declared private here
        unique_ptr(_Up __u,
        ^
1 error generated.
move01.pass.cpp failed to compile
pointer_deleter01.pass.cpp:52:41: error: calling a private constructor of class 'std::unique_ptr<A [], Deleter<A []> >'
    std::unique_ptr<A[], Deleter<A[]> > s(p, Deleter<A[]>());
                                        ^
In file included from pointer_deleter01.pass.cpp:32:
../../../../../../include/memory:2432:9: note: declared private here
        unique_ptr(_Up __u,
        ^
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:41: error: calling a private constructor of class 'std::unique_ptr<A [], Deleter<A []> >'
    std::unique_ptr<A[], Deleter<A[]> > s1(p1, Deleter<A[]>(1));
                                        ^
In file included from swap.pass.cpp:30:
../../../../../../include/memory:2432:9: note: declared private here
        unique_ptr(_Up __u,
        ^
swap.pass.cpp:57:41: error: calling a private constructor of class 'std::unique_ptr<A [], Deleter<A []> >'
    std::unique_ptr<A[], Deleter<A[]> > s2(p2, Deleter<A[]>(2));
                                        ^
In file included from swap.pass.cpp:30:
../../../../../../include/memory:2432:9: note: declared private here
        unique_ptr(_Up __u,
        ^
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 96: 37439 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:1209: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/__yuga_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:1221: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/__yuga_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:1209: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/__yuga_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:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(nullptr_t)
                            ^
../../../../../../include/memory:2105:38: 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
    _YUGA_INLINE_VISIBILITY explicit unique_ptr(pointer __p)
                                     ^
../../../../../../include/memory:2191:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                            ^
../../../../../../include/memory:2113:42: note: candidate template ignored: failed template argument deduction
        _YUGA_INLINE_VISIBILITY explicit unique_ptr(auto_ptr<_Up>& __p,
                                         ^
../../../../../../include/memory:2093:29: note: candidate constructor not viable: requires 0 arguments, but 1 was provided
    _YUGA_INLINE_VISIBILITY unique_ptr()
                            ^
../../../../../../include/memory:2202:29: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
    _YUGA_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:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(nullptr_t)
                            ^
../../../../../../include/memory:2105:38: 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
    _YUGA_INLINE_VISIBILITY explicit unique_ptr(pointer __p)
                                     ^
../../../../../../include/memory:2191:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                            ^
../../../../../../include/memory:2113:42: note: candidate template ignored: failed template argument deduction
        _YUGA_INLINE_VISIBILITY explicit unique_ptr(auto_ptr<_Up>& __p,
                                         ^
../../../../../../include/memory:2093:29: note: candidate constructor not viable: requires 0 arguments, but 1 was provided
    _YUGA_INLINE_VISIBILITY unique_ptr()
                            ^
../../../../../../include/memory:2202:29: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
    _YUGA_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:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(nullptr_t)
                            ^
../../../../../../include/memory:2105:38: 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
    _YUGA_INLINE_VISIBILITY explicit unique_ptr(pointer __p)
                                     ^
../../../../../../include/memory:2191:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                            ^
../../../../../../include/memory:2113:42: note: candidate template ignored: failed template argument deduction
        _YUGA_INLINE_VISIBILITY explicit unique_ptr(auto_ptr<_Up>& __p,
                                         ^
../../../../../../include/memory:2093:29: note: candidate constructor not viable: requires 0 arguments, but 1 was provided
    _YUGA_INLINE_VISIBILITY unique_ptr()
                            ^
../../../../../../include/memory:2202:29: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
    _YUGA_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:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(nullptr_t)
                            ^
../../../../../../include/memory:2191:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                            ^
../../../../../../include/memory:2186:29: note: candidate function
    _YUGA_INLINE_VISIBILITY operator __rv<unique_ptr>()
                            ^
../../../../../../include/memory:2230:29: note: candidate function
    _YUGA_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:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(nullptr_t)
                            ^
../../../../../../include/memory:2191:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                            ^
../../../../../../include/memory:2186:29: note: candidate function
    _YUGA_INLINE_VISIBILITY operator __rv<unique_ptr>()
                            ^
../../../../../../include/memory:2230:29: note: candidate function
    _YUGA_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:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(nullptr_t)
                            ^
../../../../../../include/memory:2191:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                            ^
../../../../../../include/memory:2186:29: note: candidate function
    _YUGA_INLINE_VISIBILITY operator __rv<unique_ptr>()
                            ^
../../../../../../include/memory:2230:29: note: candidate function
    _YUGA_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:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(nullptr_t)
                            ^
../../../../../../include/memory:2191:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                            ^
../../../../../../include/memory:2186:29: note: candidate function
    _YUGA_INLINE_VISIBILITY operator __rv<unique_ptr>()
                            ^
../../../../../../include/memory:2230:29: note: candidate function
    _YUGA_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:41: error: calling a private constructor of class 'std::unique_ptr<A [], Deleter<A []> >'
    std::unique_ptr<A[], Deleter<A[]> > s1(p1, Deleter<A[]>(1));
                                        ^
In file included from swap.pass.cpp:30:
../../../../../include/memory:2432:9: note: declared private here
        unique_ptr(_Up __u,
        ^
swap.pass.cpp:78:41: error: calling a private constructor of class 'std::unique_ptr<A [], Deleter<A []> >'
    std::unique_ptr<A[], Deleter<A[]> > s2(p2, Deleter<A[]>(2));
                                        ^
In file included from swap.pass.cpp:30:
../../../../../include/memory:2432:9: note: declared private here
        unique_ptr(_Up __u,
        ^
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 96: 38015 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 96: 38030 Abort trap              ./a.out
shared_ptr_rv.pass.cpp failed at run time
failed 2 tests in /test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign
passed 4 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
Assertion failed: (A::count == 1), function main, file unique_ptr.pass.cpp, line 94.
./testit: line 96: 38295 Abort trap              ./a.out
unique_ptr.pass.cpp failed at run time
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
./testit: line 96: 38367 Abort trap              ./a.out
io.pass.cpp failed at run time
failed 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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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
is_abstract.pass.cpp:33:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_abstract<T>::value, "");
    ^
In file included from is_abstract.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
is_abstract.pass.cpp:84:5: note: in instantiation of function template specialization 'test_is_abstract<Abstract>' requested here
    test_is_abstract<Abstract>();
    ^
In file included from is_abstract.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__yuga_config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
is_abstract.pass.cpp:34:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_abstract<const T>::value, "");
    ^
In file included from is_abstract.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
is_abstract.pass.cpp:35:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_abstract<volatile T>::value, "");
    ^
In file included from is_abstract.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
is_abstract.pass.cpp:36:5: error: implicit instantiation of undefined template '__static_assert_test<0>'
    static_assert( std::is_abstract<const volatile T>::value, "");
    ^
In file included from is_abstract.pass.cpp:28:
In file included from ../../../../../include/type_traits:154:
../../../../../include/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_config:138:24: note: template is declared here
template <bool> struct __static_assert_test;
                       ^
4 errors generated.
is_abstract.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:54: note: in instantiation of template class 'std::__is_empty1<Union>' requested here
struct __yuga_empty : public integral_constant<bool, sizeof(__is_empty1<_Tp>) == sizeof(__is_empty2)> {};
                                                     ^
../../../../../include/type_traits:701:40: note: in instantiation of template class 'std::__yuga_empty<Union, 1>' requested here
template <class _Tp> struct is_empty : public __yuga_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:54: note: in instantiation of template class 'std::__is_empty1<Union const>' requested here
struct __yuga_empty : public integral_constant<bool, sizeof(__is_empty1<_Tp>) == sizeof(__is_empty2)> {};
                                                     ^
../../../../../include/type_traits:701:40: note: in instantiation of template class 'std::__yuga_empty<Union const, 1>' requested here
template <class _Tp> struct is_empty : public __yuga_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:54: note: in instantiation of template class 'std::__is_empty1<Union volatile>' requested here
struct __yuga_empty : public integral_constant<bool, sizeof(__is_empty1<_Tp>) == sizeof(__is_empty2)> {};
                                                     ^
../../../../../include/type_traits:701:40: note: in instantiation of template class 'std::__yuga_empty<Union volatile, 1>' requested here
template <class _Tp> struct is_empty : public __yuga_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:54: note: in instantiation of template class 'std::__is_empty1<Union const volatile>' requested here
struct __yuga_empty : public integral_constant<bool, sizeof(__is_empty1<_Tp>) == sizeof(__is_empty2)> {};
                                                     ^
../../../../../include/type_traits:701:40: note: in instantiation of template class 'std::__yuga_empty<Union const volatile, 1>' requested here
template <class _Tp> struct is_empty : public __yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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/__yuga_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/__yuga_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/__yuga_config:142:35: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                  ^
../../../../../include/__yuga_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::__yuga_polymorphic<Union, 1>' requested here
template <class _Tp> struct is_polymorphic : public __yuga_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::__yuga_polymorphic<Union const, 1>' requested here
template <class _Tp> struct is_polymorphic : public __yuga_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::__yuga_polymorphic<Union volatile, 1>' requested here
template <class _Tp> struct is_polymorphic : public __yuga_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::__yuga_polymorphic<Union const volatile, 1>' requested here
template <class _Tp> struct is_polymorphic : public __yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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 25 tests in /test/utilities/meta/meta.unary/meta.unary.prop
passed 9 tests in /test/utilities/meta/meta.unary/meta.unary.prop
passed 1 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 1 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
./testit: line 96: 40016 Abort trap              ./a.out
stream_in.pass.cpp failed at run time
./testit: line 96: 40037 Abort trap              ./a.out
stream_out.pass.cpp failed at run time
failed 2 tests in /test/utilities/template.bitset/bitset.operators
passed 3 tests in /test/utilities/template.bitset/bitset.operators
passed 6 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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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: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:137: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:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(nullptr_t)
                            ^
../../../../../include/memory:2105:38: 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
    _YUGA_INLINE_VISIBILITY explicit unique_ptr(pointer __p)
                                     ^
../../../../../include/memory:2191:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                            ^
../../../../../include/memory:2113:42: note: candidate template ignored: failed template argument deduction
        _YUGA_INLINE_VISIBILITY explicit unique_ptr(auto_ptr<_Up>& __p,
                                         ^
../../../../../include/memory:2093:29: note: candidate constructor not viable: requires 0 arguments, but 1 was provided
    _YUGA_INLINE_VISIBILITY unique_ptr()
                            ^
../../../../../include/memory:2202:29: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
    _YUGA_INLINE_VISIBILITY unique_ptr(pointer __p, deleter_type __d)
                            ^
8 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: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:137: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:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(nullptr_t)
                            ^
../../../../../include/memory:2105:38: 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
    _YUGA_INLINE_VISIBILITY explicit unique_ptr(pointer __p)
                                     ^
../../../../../include/memory:2191:29: 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
    _YUGA_INLINE_VISIBILITY unique_ptr(__rv<unique_ptr> __u)
                            ^
../../../../../include/memory:2113:42: note: candidate template ignored: failed template argument deduction
        _YUGA_INLINE_VISIBILITY explicit unique_ptr(auto_ptr<_Up>& __p,
                                         ^
../../../../../include/memory:2093:29: note: candidate constructor not viable: requires 0 arguments, but 1 was provided
    _YUGA_INLINE_VISIBILITY unique_ptr()
                            ^
../../../../../include/memory:2202:29: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
    _YUGA_INLINE_VISIBILITY unique_ptr(pointer __p, deleter_type __d)
                            ^
7 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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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/__yuga_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
forward.pass.cpp:78:5: error: no matching function for call to 'forward'
    static_assert(sizeof(test(std::forward<const A&>(source()))) == 2, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
forward.pass.cpp:78:31: note: instantiated from:
    static_assert(sizeof(test(std::forward<const A&>(source()))) == 2, "");
                              ^~~~~~~~~~~~~~~~~~~~~~
In file included from forward.pass.cpp:26:
In file included from ../../../../include/utility:79:
In file included from ../../../../include/__tuple:39:
../../../../include/type_traits:1207:1: note: candidate function [with T = A const &, U = A] not viable: no known conversion from 'A' to 'A &' for 1st argument
forward(U& t)
^
../../../../include/type_traits:1219:1: note: candidate template ignored: failed template argument deduction
forward(U& t)
^
forward.pass.cpp:78:5: error: type name requires a specifier or qualifier
    static_assert(sizeof(test(std::forward<const A&>(source()))) == 2, "");
    ^
In file included from forward.pass.cpp:26:
In file included from ../../../../include/utility:78:
../../../../include/__yuga_config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
forward.pass.cpp:78:5: error: C++ requires a type specifier for all declarations
    static_assert(sizeof(test(std::forward<const A&>(source()))) == 2, "");
    ^
In file included from forward.pass.cpp:26:
In file included from ../../../../include/utility:78:
../../../../include/__yuga_config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
forward.pass.cpp:80:5: error: no matching function for call to 'forward'
    static_assert(sizeof(test(std::forward<const A>(source()))) == 2, "");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
forward.pass.cpp:80:31: note: instantiated from:
    static_assert(sizeof(test(std::forward<const A>(source()))) == 2, "");
                              ^~~~~~~~~~~~~~~~~~~~~
In file included from forward.pass.cpp:26:
In file included from ../../../../include/utility:79:
In file included from ../../../../include/__tuple:39:
../../../../include/type_traits:1207:1: note: candidate function [with T = A const, U = A] not viable: no known conversion from 'A' to 'A &' for 1st argument
forward(U& t)
^
../../../../include/type_traits:1219:1: note: candidate template ignored: failed template argument deduction
forward(U& t)
^
forward.pass.cpp:80:5: error: type name requires a specifier or qualifier
    static_assert(sizeof(test(std::forward<const A>(source()))) == 2, "");
    ^
In file included from forward.pass.cpp:26:
In file included from ../../../../include/utility:78:
../../../../include/__yuga_config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
forward.pass.cpp:80:5: error: C++ requires a type specifier for all declarations
    static_assert(sizeof(test(std::forward<const A>(source()))) == 2, "");
    ^
In file included from forward.pass.cpp:26:
In file included from ../../../../include/utility:78:
../../../../include/__yuga_config:142:69: note: instantiated from:
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
                                                                    ^
6 errors generated.
forward.pass.cpp failed to compile
failed 1 tests in /test/utilities/utility/forward
passed 12 tests in /test/utilities/utility/forward
passed 1 tests in /test/utilities/utility/operators
not implemented:  /test/utilities/utility/pairs
not implemented:  /test/utilities/utility/pairs/pair.astuple
not implemented:  /test/utilities/utility/pairs/pair.piecewise
not implemented:  /test/utilities/utility/pairs/pair.range
not implemented:  /test/utilities/utility/pairs/pairs.general
not implemented:  /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 101239)
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   : 145
sections with failures   : 157
sections without failures: 749
                       +   ----
total number of sections : 1051
----------------------------------------------------
number of tests failed   : 590
number of tests passed   : 2733
                       +   ----
total number of tests    : 3323
****************************************************
