0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

21.3.3 Header <type_traits> synopsis [meta.type.synop] C++N4910:2022 (506) p635.cpp

Last updated at Posted at 2022-07-23

はじめに(Introduction)

N4910 Working Draft, Standard for Programming Language C++
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4910.pdf

n4910は、ISO/IEC JTC1 SC22 WG21の作業原案(Working Draft)です。
公式のISO/IEC 14882原本ではありません。
ISO/IEC JTC1 SC22 WG21では、可能な限り作業文書を公開し、幅広い意見を求めています。
一連の記事はコード断片をコンパイルできる形にする方法を検討してコンパイル、リンク、実行して、規格案の原文と処理系(g++, Clang++)との違いを確認し、技術内容を検討し、ISO/IEC JTC1 SC22 WG21にフィードバックするために用います。
また、CERT C++, MISRA C++等のコーディング標準のコード断片をコンパイルする際の参考にさせていただこうと考えています。CERT C++, MISRA C++が標準化の動きとの時間的なずれがあれば確認できれば幸いです。また、boostライブラリとの関連、Linux OS, TOPPERSカーネル、g++(GCC), clang++(LLVM)との関係も調査中です。
何か、抜け漏れ、耳より情報がありましたらおしらせくださると幸いです。

<この項は書きかけです。順次追記します。>

背景(back ground)

C/C++でコンパイルエラーが出ると、途方にくれることがしばしばあります。
何回かに1回は、該当するエラーが検索できます。
ただ、条件が違っていて、そこでの修正方法では目的を達成しないこともしばしばです。いろいろな条件のコンパイルエラーとその対応方法について、広く記録することによって、いつか同じエラーに遭遇した時にやくに立つことを目指しています。

この半年の間で、三度、自分のネットでの記録に助けられたことがあります。
また過去に解決できなかった記録を10種類以上、最近になって解決できたことがあります。それは、主に次の3つの情報に基づいています。

https://stackoverflow.com
https://cpprefjp.github.io
http://ja.cppreference.com/

また
https://researchmap.jp/joub9b3my-1797580/#_1797580
に記載したサイトのお世話になっています。

作業方針(sequence)

Clang++では-std=c++03, C++2bの2種類
g++では-std=c++03, c++2bの2種類
でコンパイルし、

1)コンパイルエラーを収集する。
2)コンパイルエラーをなくす方法を検討する。
コンパイルエラーになる例を示すだけが目的のコードは、コンパイルエラーをなくすのではなく、コンパイルエラーの種類を収集するだけにする。
文法を示すのが目的のコード場合に、コンパイルエラーをなくすのに手間がかかる場合は、順次作業します。
3)リンクエラーをなくす方法を検討する。
文法を示すのが目的のコード場合に、リンクエラーをなくすのに手間がかかる場合は、順次作業します。
4)意味のある出力を作る。
コンパイル、リンクが通っても、意味のある出力を示そうとすると、コンパイル・リンクエラーが出て収拾できそうにない場合がある。順次作業します。

1)だけのものから4)まで進んだものと色々ある状態です。一歩でも前に進むご助言をお待ちしています。「検討事項」の欄に現状を記録するようにしています。

C++N4910:2022 Standard Working Draft on ISO/IEC 14882(0) sample code compile list

C++N4741, 2018 Standard Working Draft on ISO/IEC 14882 sample code compile list

C++N4606, 2016符号断片編纂一覧(example code compile list)

C++N4606, 2016 Working Draft 2016, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/

C++N3242, 2011 sample code compile list on clang++ and g++

編纂器(Compiler)

clang++ --version

Debian clang version 14.0.5-++20220610033153+c12386ae247c-1~exp1~20220610153237.151
Target: x86_64-pc-linux-gnu, Thread model: posix, InstalledDir: /usr/bin

g++- --version

g++ (GCC) 12.1.0 Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

21.3.3 Header synopsis [meta.type.synop] C++N4910:2022 (506) p635.cpp

算譜(source code)

p635.cpp
// C++N4910 Committee Draft, Standard for Programming Language C++
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4910.pdf
const char * n4910 = " 21.3.3 Header <type_traits> synopsis [meta.type.synop] C++N4910:2022 (506) p635.cpp";
// Debian clang version 14.0.5-++20220610033153+c12386ae247c-
// g++ (GCC) 12.1.0 Copyright (C) 2022 Free Software Foundation, Inc.
// Edited by Dr. OGAWA Kiyoshi. Compile procedure and results record.
// C++N4910:2022 Standard Working Draft on ISO/IEC 14882(0) sample code compile list
// https://qiita.com/kaizen_nagoya/items/fc957ddddd402004bb91

#include <iostream>
#include <cstdio>
#include <cstdlib> 
#include <cstring>
#include <cassert>
#include <coroutine>
#include <vector>
#include <complex>
#include <map>
#include <atomic>
#include <unordered_map>
#include <memory>
#include <typeinfo>

using namespace std;

// Example 1  
namespace std {
// 21.3.4, helper class
template<class T, T v> struct integral_constant;
    template<bool B>
      using bool_constant = integral_constant<bool, B>;
    using true_type  = bool_constant<true>;
    using false_type = bool_constant<false>;
// 21.3.5.2, primary type categories
template<class T> struct is_void;
template<class T> struct is_null_pointer; template<class T> struct is_integral;
template<class T> struct is_floating_point; template<class T> struct is_array;
template<class T> struct is_pointer;
template<class T> struct is_lvalue_reference; template<class T> struct is_rvalue_reference; template<class T> struct is_member_object_pointer; template<class T> struct is_member_function_pointer; template<class T> struct is_enum;
    template<class T> struct is_union;
    template<class T> struct is_class;
    template<class T> struct is_function;
// 21.3.5.3, composite type categories 
template<class T> struct is_reference; template<class T> struct is_arithmetic; template<class T> struct is_fundamental; template<class T> struct is_object; template<class T> struct is_scalar; template<class T> struct is_compound;
template<class T> struct is_member_pointer;
// 21.3.5.4, type properties
template<class T> struct is_const; template<class T> struct is_volatile; template<class T> struct is_trivial; template<class T> struct is_trivially_copyable; template<class T> struct is_standard_layout; template<class T> struct is_empty; template<class T> struct is_polymorphic; template<class T> struct is_abstract; template<class T> struct is_final; template<class T> struct is_aggregate;
template<class T> struct is_signed;
template<class T> struct is_unsigned;
template<class T> struct is_bounded_array;
template<class T> struct is_unbounded_array;
template<class T> struct is_scoped_enum;
template<class T, class... Args> struct is_constructible;
template<class T> struct is_default_constructible;
template<class T> struct is_copy_constructible;
template<class T> struct is_move_constructible;
template<class T, class U> struct is_assignable;
template<class T> struct is_copy_assignable;
template<class T> struct is_move_assignable;
template<class T, class U> struct is_swappable_with;
template<class T> struct is_swappable;
template<class T> struct is_destructible;
template<class T, class... Args> struct is_trivially_constructible;
template<class T> struct is_trivially_default_constructible;
template<class T> struct is_trivially_copy_constructible;
template<class T> struct is_trivially_move_constructible;
template<class T, class U> struct is_trivially_assignable;
template<class T> struct is_trivially_copy_assignable;
template<class T> struct is_trivially_move_assignable;
template<class T> struct is_trivially_destructible;
template<class T, class... Args> struct is_nothrow_constructible;
template<class T> struct is_nothrow_default_constructible;
template<class T> struct is_nothrow_copy_constructible;
template<class T> struct is_nothrow_move_constructible;
template<class T, class U> struct is_nothrow_assignable;
template<class T> struct is_nothrow_copy_assignable;
template<class T> struct is_nothrow_move_assignable;
template<class T, class U> struct is_nothrow_swappable_with;
template<class T> struct is_nothrow_swappable;
template<class T> struct is_nothrow_destructible;
template<class T> struct has_virtual_destructor;
template<class T> struct has_unique_object_representations;
template<class T, class U> struct reference_constructs_from_temporary;
template<class T, class U> struct reference_converts_from_temporary;
// 21.3.6, type property queries
template<class T> struct alignment_of; template<class T> struct rank;
template<class T, unsigned I = 0> struct extent;
// 21.3.7, type relations
template<class T, class U> struct is_same;
template<class Base, class Derived> struct is_base_of;
template<class From, class To> struct is_convertible;
template<class From, class To> struct is_nothrow_convertible;
template<class T, class U> struct is_layout_compatible;
template<class Base, class Derived> struct is_pointer_interconvertible_base_of;
template<class Fn, class... ArgTypes> struct is_invocable;
template<class R, class Fn, class... ArgTypes> struct is_invocable_r;
template<class Fn, class... ArgTypes> struct is_nothrow_invocable;
template<class R, class Fn, class... ArgTypes> struct is_nothrow_invocable_r;
// 21.3.8.2, const-volatile modifications 
template<class T> struct remove_const; template<class T> struct remove_volatile; template<class T> struct remove_cv; template<class T> struct add_const; template<class T> struct add_volatile; template<class T> struct add_cv;
template<class T>
  using remove_const_t    = typename remove_const<T>::type;
template<class T>
  using remove_volatile_t = typename remove_volatile<T>::type;
template<class T>
  using remove_cv_t = typename remove_cv<T>::type;
template<class T>
  using add_const_t = typename add_const<T>::type;
template<class T>
  using add_volatile_t = typename add_volatile<T>::type;
template<class T>
  using add_cv_t = typename add_cv<T>::type;
// 21.3.8.3, reference modifications
template<class T> struct remove_reference; template<class T> struct add_lvalue_reference; template<class T> struct add_rvalue_reference;
template<class T>
  using remove_reference_t     = typename remove_reference<T>::type;
template<class T>
  using add_lvalue_reference_t = typename add_lvalue_reference<T>::type;
template<class T>
  using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;
// 21.3.8.4, sign modifications 
template<class T> struct make_signed; 
template<class T> struct make_unsigned;
template<class T>
  using make_signed_t   = typename make_signed<T>::type;
template<class T>
  using make_unsigned_t = typename make_unsigned<T>::type;
// 21.3.8.5, array modifications
template<class T> struct remove_extent; template<class T> struct remove_all_extents;
template<class T>
  using remove_extent_t      = typename remove_extent<T>::type;
template<class T>
  using remove_all_extents_t = typename remove_all_extents<T>::type;
// 21.3.8.6, pointer modifications 
template<class T> struct remove_pointer; template<class T> struct add_pointer;
template<class T>
  using remove_pointer_t = typename remove_pointer<T>::type;
template<class T>
  using add_pointer_t    = typename add_pointer<T>::type;
// 21.3.8.7, other transformations
template<class T> struct type_identity;
template<class T> struct remove_cvref;
template<class T> struct decay;
template<bool, class T = void> struct enable_if;
template<bool, class T, class F> struct conditional;
template<class... T> struct common_type;
template<class T, class U, template<class> class TQual, template<class> class UQual>
  struct basic_common_reference { };
template<class... T> struct common_reference;
template<class T> struct underlying_type;
template<class Fn, class... ArgTypes> struct invoke_result;
template<class T> struct unwrap_reference;
template<class T> struct unwrap_ref_decay;
template<class T>
  using type_identity_t = typename type_identity<T>::type;
template<class T>
  using remove_cvref_t = typename remove_cvref<T>::type;
template<class T>
  using decay_t = typename decay<T>::type;
template<bool b, class T = void>
  using enable_if_t        = typename enable_if<b, T>::type;
template<bool b, class T, class F>
  using conditional_t      = typename conditional<b, T, F>::type;
template<class... T>
  using common_type_t      = typename common_type<T...>::type;
template<class... T>
  using common_reference_t = typename common_reference<T...>::type;
template<class T>
  using underlying_type_t  = typename underlying_type<T>::type;
template<class Fn, class... ArgTypes>
  using invoke_result_t    = typename invoke_result<Fn, ArgTypes...>::type;
template<class T>
  using unwrap_reference_t = typename unwrap_reference<T>::type;
template<class T>
  using unwrap_ref_decay_t = typename unwrap_ref_decay<T>::type;
template<class...>
  using void_t             = void;
// 21.3.9, logical operator traits 
template<class... B> struct conjunction; template<class... B> struct disjunction; template<class B> struct negation;
// 21.3.5.2, primary type categories 
template<class T>
  inline constexpr bool is_void_v = is_void<T>::value;
template<class T>
  inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
template<class T>
  inline constexpr bool is_integral_v = is_integral<T>::value;
template<class T>
  inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
template<class T>
  inline constexpr bool is_array_v = is_array<T>::value;
template<class T>
  inline constexpr bool is_pointer_v = is_pointer<T>::value;
template<class T>
  inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
template<class T>
  inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
template<class T>
  inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
template<class T>
  inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
template<class T>
  inline constexpr bool is_enum_v = is_enum<T>::value;
template<class T>
  inline constexpr bool is_union_v = is_union<T>::value;
template<class T>
  inline constexpr bool is_class_v = is_class<T>::value;
template<class T>
  inline constexpr bool is_function_v = is_function<T>::value;
// 21.3.5.3, composite type categories 
template<class T>
  inline constexpr bool is_reference_v = is_reference<T>::value;
template<class T>
  inline constexpr bool is_arithmetic_v = is_arithmetic<T>::value;
template<class T>
  inline constexpr bool is_fundamental_v = is_fundamental<T>::value;
template<class T>
  inline constexpr bool is_object_v = is_object<T>::value;
template<class T>
  inline constexpr bool is_scalar_v = is_scalar<T>::value;
template<class T>
  inline constexpr bool is_compound_v = is_compound<T>::value;
template<class T>
  inline constexpr bool is_member_pointer_v = is_member_pointer<T>::value;
// 21.3.5.4, type properties 
template<class T>
  inline constexpr bool is_const_v = is_const<T>::value;
template<class T>
  inline constexpr bool is_volatile_v = is_volatile<T>::value;
template<class T>
  inline constexpr bool is_trivial_v = is_trivial<T>::value;
template<class T>
  inline constexpr bool is_trivially_copyable_v = is_trivially_copyable<T>::value;
template<class T>
  inline constexpr bool is_standard_layout_v = is_standard_layout<T>::value;
template<class T>
  inline constexpr bool is_empty_v = is_empty<T>::value;
template<class T>
  inline constexpr bool is_polymorphic_v = is_polymorphic<T>::value;
template<class T>
  inline constexpr bool is_abstract_v = is_abstract<T>::value;
template<class T>
  inline constexpr bool is_final_v = is_final<T>::value;
template<class T>
  inline constexpr bool is_aggregate_v = is_aggregate<T>::value;
template<class T>
  inline constexpr bool is_signed_v = is_signed<T>::value;
template<class T>
  inline constexpr bool is_unsigned_v = is_unsigned<T>::value;
template<class T>
  inline constexpr bool is_bounded_array_v = is_bounded_array<T>::value;
template<class T>
  inline constexpr bool is_unbounded_array_v = is_unbounded_array<T>::value;
template<class T>
  inline constexpr bool is_scoped_enum_v = is_scoped_enum<T>::value;
template<class T, class... Args>
  inline constexpr bool is_constructible_v = is_constructible<T, Args...>::value;
template<class T>
  inline constexpr bool is_default_constructible_v = is_default_constructible<T>::value;
template<class T>
  inline constexpr bool is_copy_constructible_v = is_copy_constructible<T>::value;
template<class T>
  inline constexpr bool is_move_constructible_v = is_move_constructible<T>::value;
template<class T, class U>
  inline constexpr bool is_assignable_v = is_assignable<T, U>::value;
template<class T>
  inline constexpr bool is_copy_assignable_v = is_copy_assignable<T>::value;
template<class T>
  inline constexpr bool is_move_assignable_v = is_move_assignable<T>::value;
template<class T, class U>
  inline constexpr bool is_swappable_with_v = is_swappable_with<T, U>::value;
template<class T>
  inline constexpr bool is_swappable_v = is_swappable<T>::value;
template<class T>
  inline constexpr bool is_destructible_v = is_destructible<T>::value;
template<class T, class... Args>
  inline constexpr bool is_trivially_constructible_v
    = is_trivially_constructible<T, Args...>::value;
template<class T>
  inline constexpr bool is_trivially_default_constructible_v
    = is_trivially_default_constructible<T>::value;
template<class T>
  inline constexpr bool is_trivially_copy_constructible_v
    = is_trivially_copy_constructible<T>::value;
template<class T>
  inline constexpr bool is_trivially_move_constructible_v
    = is_trivially_move_constructible<T>::value;
template<class T, class U>
  inline constexpr bool is_trivially_assignable_v = is_trivially_assignable<T, U>::value;
template<class T>
  inline constexpr bool is_trivially_copy_assignable_v
    = is_trivially_copy_assignable<T>::value;
template<class T>
  inline constexpr bool is_trivially_move_assignable_v
    = is_trivially_move_assignable<T>::value;
template<class T>
  inline constexpr bool is_trivially_destructible_v = is_trivially_destructible<T>::value;
template<class T, class... Args>
  inline constexpr bool is_nothrow_constructible_v
    = is_nothrow_constructible<T, Args...>::value;
template<class T>
  inline constexpr bool is_nothrow_default_constructible_v
    = is_nothrow_default_constructible<T>::value;
template<class T>
  inline constexpr bool is_nothrow_copy_constructible_v
    = is_nothrow_copy_constructible<T>::value;
template<class T>
  inline constexpr bool is_nothrow_move_constructible_v
    = is_nothrow_move_constructible<T>::value;
template<class T, class U>
  inline constexpr bool is_nothrow_assignable_v = is_nothrow_assignable<T, U>::value;
template<class T>
  inline constexpr bool is_nothrow_copy_assignable_v = is_nothrow_copy_assignable<T>::value;
template<class T>
  inline constexpr bool is_nothrow_move_assignable_v = is_nothrow_move_assignable<T>::value;
template<class T, class U>
  inline constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with<T, U>::value;
template<class T>
  inline constexpr bool is_nothrow_swappable_v = is_nothrow_swappable<T>::value;
template<class T>
  inline constexpr bool is_nothrow_destructible_v = is_nothrow_destructible<T>::value;
template<class T>
  inline constexpr bool has_virtual_destructor_v = has_virtual_destructor<T>::value;
template<class T>
  inline constexpr bool has_unique_object_representations_v
    = has_unique_object_representations<T>::value;
template<class T, class U>
  inline constexpr bool reference_constructs_from_temporary_v
    = reference_constructs_from_temporary<T, U>::value;
template<class T, class U>
  inline constexpr bool reference_converts_from_temporary_v
    = reference_converts_from_temporary<T, U>::value;
// 21.3.6, type property queries 
template<class T>
  inline constexpr size_t alignment_of_v = alignment_of<T>::value;
template<class T>
  inline constexpr size_t rank_v = rank<T>::value;
template<class T, unsigned I = 0>
  inline constexpr size_t extent_v = extent<T, I>::value;
// 21.3.7, type relations 
template<class T, class U>
  inline constexpr bool is_same_v = is_same<T, U>::value;
template<class Base, class Derived>
  inline constexpr bool is_base_of_v = is_base_of<Base, Derived>::value;
template<class From, class To>
  inline constexpr bool is_convertible_v = is_convertible<From, To>::value;
template<class From, class To>
  inline constexpr bool is_nothrow_convertible_v = is_nothrow_convertible<From, To>::value;
template<class T, class U>
  inline constexpr bool is_layout_compatible_v = is_layout_compatible<T, U>::value;
template<class Base, class Derived>
  inline constexpr bool is_pointer_interconvertible_base_of_v
    = is_pointer_interconvertible_base_of<Base, Derived>::value;
template<class Fn, class... ArgTypes>
  inline constexpr bool is_invocable_v = is_invocable<Fn, ArgTypes...>::value;
template<class R, class Fn, class... ArgTypes>
  inline constexpr bool is_invocable_r_v = is_invocable_r<R, Fn, ArgTypes...>::value;
template<class Fn, class... ArgTypes>
  inline constexpr bool is_nothrow_invocable_v = is_nothrow_invocable<Fn, ArgTypes...>::value;
template<class R, class Fn, class... ArgTypes>
  inline constexpr bool is_nothrow_invocable_r_v
    = is_nothrow_invocable_r<R, Fn, ArgTypes...>::value;
// 21.3.9, logical operator traits 
template<class... B>
  inline constexpr bool conjunction_v = conjunction<B...>::value;
template<class... B>
  inline constexpr bool disjunction_v = disjunction<B...>::value;
template<class B>
  inline constexpr bool negation_v = negation<B>::value;
// 21.3.10, member relationships template<class S, class M>
      constexpr bool is_pointer_interconvertible_with_class(M S::*m) noexcept;
    template<class S1, class S2, class M1, class M2>
      constexpr bool is_corresponding_member(M1 S1::*m1, M2 S2::*m2) noexcept;
// 21.3.11, constant evaluation context
    constexpr bool is_constant_evaluated() noexcept;
  }
int main(){
  cout  <<  n4910 << endl;
  return EXIT_SUCCESS;
}

編纂・実行結果(compile and go)

bash
$ clang++ p635.cpp -std=03 -o p635l -I. -Wall
In file included from p635.cpp:19:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/atomic:38:
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/c++0x_warning.h:32:2: error: This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
#error This file requires compiler and library support \
 ^
p635.cpp:31:29: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
      using bool_constant = integral_constant<bool, B>;
                            ^
p635.cpp:32:24: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
    using true_type  = bool_constant<true>;
                       ^
p635.cpp:33:24: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
    using false_type = bool_constant<false>;
                       ^
p635.cpp:53:24: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class T, class... Args> struct is_constructible;
                       ^
p635.cpp:63:24: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class T, class... Args> struct is_trivially_constructible;
                       ^
p635.cpp:71:24: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class T, class... Args> struct is_nothrow_constructible;
                       ^
p635.cpp:95:25: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class Fn, class... ArgTypes> struct is_invocable;
                        ^
p635.cpp:96:34: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class R, class Fn, class... ArgTypes> struct is_invocable_r;
                                 ^
p635.cpp:97:25: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class Fn, class... ArgTypes> struct is_nothrow_invocable;
                        ^
p635.cpp:98:34: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class R, class Fn, class... ArgTypes> struct is_nothrow_invocable_r;
                                 ^
p635.cpp:102:29: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using remove_const_t    = typename remove_const<T>::type;
                            ^
p635.cpp:104:29: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using remove_volatile_t = typename remove_volatile<T>::type;
                            ^
p635.cpp:106:23: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using remove_cv_t = typename remove_cv<T>::type;
                      ^
p635.cpp:108:23: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using add_const_t = typename add_const<T>::type;
                      ^
p635.cpp:110:26: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using add_volatile_t = typename add_volatile<T>::type;
                         ^
p635.cpp:112:20: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using add_cv_t = typename add_cv<T>::type;
                   ^
p635.cpp:116:34: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using remove_reference_t     = typename remove_reference<T>::type;
                                 ^
p635.cpp:118:34: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using add_lvalue_reference_t = typename add_lvalue_reference<T>::type;
                                 ^
p635.cpp:120:34: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;
                                 ^
p635.cpp:125:27: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using make_signed_t   = typename make_signed<T>::type;
                          ^
p635.cpp:127:27: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using make_unsigned_t = typename make_unsigned<T>::type;
                          ^
p635.cpp:131:32: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using remove_extent_t      = typename remove_extent<T>::type;
                               ^
p635.cpp:133:32: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using remove_all_extents_t = typename remove_all_extents<T>::type;
                               ^
p635.cpp:137:28: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using remove_pointer_t = typename remove_pointer<T>::type;
                           ^
p635.cpp:139:28: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using add_pointer_t    = typename add_pointer<T>::type;
                           ^
p635.cpp:146:15: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class... T> struct common_type;
              ^
p635.cpp:149:15: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class... T> struct common_reference;
              ^
p635.cpp:151:25: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class Fn, class... ArgTypes> struct invoke_result;
                        ^
p635.cpp:155:27: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using type_identity_t = typename type_identity<T>::type;
                          ^
p635.cpp:157:26: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using remove_cvref_t = typename remove_cvref<T>::type;
                         ^
p635.cpp:159:19: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using decay_t = typename decay<T>::type;
                  ^
p635.cpp:161:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using enable_if_t        = typename enable_if<b, T>::type;
                             ^
p635.cpp:163:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using conditional_t      = typename conditional<b, T, F>::type;
                             ^
p635.cpp:164:15: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class... T>
              ^
p635.cpp:165:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using common_type_t      = typename common_type<T...>::type;
                             ^
p635.cpp:166:15: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class... T>
              ^
p635.cpp:167:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using common_reference_t = typename common_reference<T...>::type;
                             ^
p635.cpp:169:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using underlying_type_t  = typename underlying_type<T>::type;
                             ^
p635.cpp:170:25: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class Fn, class... ArgTypes>
                        ^
p635.cpp:171:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using invoke_result_t    = typename invoke_result<Fn, ArgTypes...>::type;
                             ^
p635.cpp:173:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using unwrap_reference_t = typename unwrap_reference<T>::type;
                             ^
p635.cpp:175:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using unwrap_ref_decay_t = typename unwrap_ref_decay<T>::type;
                             ^
p635.cpp:176:15: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class...>
              ^
p635.cpp:177:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using void_t             = void;
                             ^
p635.cpp:179:15: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class... B> struct conjunction; template<class... B> struct disjunction; template<class B> struct negation;
              ^
p635.cpp:179:56: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class... B> struct conjunction; template<class... B> struct disjunction; template<class B> struct negation;
                                                       ^
p635.cpp:182:10: error: unknown type name 'constexpr'
  inline constexpr bool is_void_v = is_void<T>::value;
         ^
p635.cpp:182:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_void_v = is_void<T>::value;
                        ^
p635.cpp:182:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_void_v = is_void<T>::value;
  ^
p635.cpp:184:10: error: unknown type name 'constexpr'
  inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
         ^
p635.cpp:184:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
                        ^
p635.cpp:184:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
  ^
p635.cpp:186:10: error: unknown type name 'constexpr'
  inline constexpr bool is_integral_v = is_integral<T>::value;
         ^
p635.cpp:186:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_integral_v = is_integral<T>::value;
                        ^
p635.cpp:186:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_integral_v = is_integral<T>::value;
  ^
p635.cpp:188:10: error: unknown type name 'constexpr'
  inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
         ^
p635.cpp:188:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
                        ^
p635.cpp:188:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
  ^
p635.cpp:190:10: error: unknown type name 'constexpr'
  inline constexpr bool is_array_v = is_array<T>::value;
         ^
p635.cpp:190:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_array_v = is_array<T>::value;
                        ^
p635.cpp:190:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_array_v = is_array<T>::value;
  ^
p635.cpp:192:10: error: unknown type name 'constexpr'
  inline constexpr bool is_pointer_v = is_pointer<T>::value;
         ^
p635.cpp:192:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_pointer_v = is_pointer<T>::value;
                        ^
p635.cpp:192:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_pointer_v = is_pointer<T>::value;
  ^
p635.cpp:194:10: error: unknown type name 'constexpr'
  inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
         ^
p635.cpp:194:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
                        ^
p635.cpp:194:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
  ^
p635.cpp:196:10: error: unknown type name 'constexpr'
  inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
         ^
p635.cpp:196:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
                        ^
p635.cpp:196:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
  ^
p635.cpp:198:10: error: unknown type name 'constexpr'
  inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
         ^
p635.cpp:198:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
                        ^
p635.cpp:198:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
  ^
p635.cpp:200:10: error: unknown type name 'constexpr'
  inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
         ^
p635.cpp:200:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
                        ^
p635.cpp:200:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
  ^
p635.cpp:202:10: error: unknown type name 'constexpr'
  inline constexpr bool is_enum_v = is_enum<T>::value;
         ^
p635.cpp:202:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_enum_v = is_enum<T>::value;
                        ^
p635.cpp:202:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_enum_v = is_enum<T>::value;
  ^
p635.cpp:204:10: error: unknown type name 'constexpr'
  inline constexpr bool is_union_v = is_union<T>::value;
         ^
p635.cpp:204:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_union_v = is_union<T>::value;
                        ^
p635.cpp:204:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_union_v = is_union<T>::value;
  ^
p635.cpp:206:10: error: unknown type name 'constexpr'
  inline constexpr bool is_class_v = is_class<T>::value;
         ^
p635.cpp:206:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_class_v = is_class<T>::value;
                        ^
p635.cpp:206:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_class_v = is_class<T>::value;
  ^
p635.cpp:208:10: error: unknown type name 'constexpr'
  inline constexpr bool is_function_v = is_function<T>::value;
         ^
p635.cpp:208:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_function_v = is_function<T>::value;
                        ^
p635.cpp:208:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_function_v = is_function<T>::value;
  ^
p635.cpp:211:10: error: unknown type name 'constexpr'
  inline constexpr bool is_reference_v = is_reference<T>::value;
         ^
p635.cpp:211:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_reference_v = is_reference<T>::value;
                        ^
p635.cpp:211:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_reference_v = is_reference<T>::value;
  ^
p635.cpp:213:10: error: unknown type name 'constexpr'
  inline constexpr bool is_arithmetic_v = is_arithmetic<T>::value;
         ^
p635.cpp:213:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_arithmetic_v = is_arithmetic<T>::value;
                        ^
p635.cpp:213:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_arithmetic_v = is_arithmetic<T>::value;
  ^
p635.cpp:215:10: error: unknown type name 'constexpr'
  inline constexpr bool is_fundamental_v = is_fundamental<T>::value;
         ^
p635.cpp:215:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_fundamental_v = is_fundamental<T>::value;
                        ^
p635.cpp:215:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_fundamental_v = is_fundamental<T>::value;
  ^
p635.cpp:217:10: error: unknown type name 'constexpr'
  inline constexpr bool is_object_v = is_object<T>::value;
         ^
p635.cpp:217:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
  inline constexpr bool is_object_v = is_object<T>::value;
                        ^
p635.cpp:217:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
  inline constexpr bool is_object_v = is_object<T>::value;
  ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
82 warnings and 20 errors generated.
$ clang++ p635.cpp -std=2b -o p635l -I. -Wall
p635.cpp:87:32: error: template parameter redefines default argument
template<class T, unsigned I = 0> struct extent;
                               ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:781:33: note: previous default template argument defined here
  template<typename, unsigned = 0>
                                ^
p635.cpp:144:26: error: template parameter redefines default argument
template<bool, class T = void> struct enable_if;
                         ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:2181:33: note: previous default template argument defined here
  template<bool, typename _Tp = void>
                                ^
p635.cpp:148:10: error: redefinition of 'basic_common_reference'
  struct basic_common_reference { };
         ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3345:12: note: previous definition is here
    struct basic_common_reference
           ^
p635.cpp:157:9: error: type alias template redefinition with different types ('typename remove_cvref<T>::type' vs '__remove_cvref_t<_Tp>' (aka 'typename remove_cv<typename remove_reference<type-parameter-0-0>::type>::type'))
  using remove_cvref_t = typename remove_cvref<T>::type;
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3235:11: note: previous definition is here
    using remove_cvref_t = __remove_cvref_t<_Tp>;
          ^
p635.cpp:160:28: error: template parameter redefines default argument
template<bool b, class T = void>
                           ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:2553:39: note: previous default template argument defined here
  template<bool _Cond, typename _Tp = void>
                                      ^
p635.cpp:182:25: error: redefinition of 'is_void_v'
  inline constexpr bool is_void_v = is_void<T>::value;
                        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3027:25: note: previous definition is here
  inline constexpr bool is_void_v = is_void<_Tp>::value;
                        ^
p635.cpp:184:25: error: redefinition of 'is_null_pointer_v'
  inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
                        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3029:25: note: previous definition is here
  inline constexpr bool is_null_pointer_v = is_null_pointer<_Tp>::value;
                        ^
p635.cpp:186:25: error: redefinition of 'is_integral_v'
  inline constexpr bool is_integral_v = is_integral<T>::value;
                        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3031:25: note: previous definition is here
  inline constexpr bool is_integral_v = is_integral<_Tp>::value;
                        ^
p635.cpp:188:25: error: redefinition of 'is_floating_point_v'
  inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
                        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3033:25: note: previous definition is here
  inline constexpr bool is_floating_point_v = is_floating_point<_Tp>::value;
                        ^
p635.cpp:190:25: error: redefinition of 'is_array_v'
  inline constexpr bool is_array_v = is_array<T>::value;
                        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3035:25: note: previous definition is here
  inline constexpr bool is_array_v = is_array<_Tp>::value;
                        ^
p635.cpp:192:25: error: redefinition of 'is_pointer_v'
  inline constexpr bool is_pointer_v = is_pointer<T>::value;
                        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3037:25: note: previous definition is here
  inline constexpr bool is_pointer_v = is_pointer<_Tp>::value;
                        ^
p635.cpp:194:25: error: redefinition of 'is_lvalue_reference_v'
  inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
                        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3039:25: note: previous definition is here
  inline constexpr bool is_lvalue_reference_v =
                        ^
p635.cpp:196:25: error: redefinition of 'is_rvalue_reference_v'
  inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
                        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3042:25: note: previous definition is here
  inline constexpr bool is_rvalue_reference_v =
                        ^
p635.cpp:198:25: error: redefinition of 'is_member_object_pointer_v'
  inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
                        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3045:25: note: previous definition is here
  inline constexpr bool is_member_object_pointer_v =
                        ^
p635.cpp:200:25: error: redefinition of 'is_member_function_pointer_v'
  inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
                        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3048:25: note: previous definition is here
  inline constexpr bool is_member_function_pointer_v =
                        ^
p635.cpp:202:25: error: redefinition of 'is_enum_v'
  inline constexpr bool is_enum_v = is_enum<T>::value;
                        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3051:25: note: previous definition is here
  inline constexpr bool is_enum_v = is_enum<_Tp>::value;
                        ^
p635.cpp:204:25: error: redefinition of 'is_union_v'
  inline constexpr bool is_union_v = is_union<T>::value;
                        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3053:25: note: previous definition is here
  inline constexpr bool is_union_v = is_union<_Tp>::value;
                        ^
p635.cpp:206:25: error: redefinition of 'is_class_v'
  inline constexpr bool is_class_v = is_class<T>::value;
                        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3055:25: note: previous definition is here
  inline constexpr bool is_class_v = is_class<_Tp>::value;
                        ^
p635.cpp:208:25: error: redefinition of 'is_function_v'
  inline constexpr bool is_function_v = is_function<T>::value;
                        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3057:25: note: previous definition is here
  inline constexpr bool is_function_v = is_function<_Tp>::value;
                        ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.

$ g++ p635.cpp -std=03 -o p635g -I. -Wall
In file included from /usr/local/include/c++/12.1.0/atomic:38,
                 from p635.cpp:19:
/usr/local/include/c++/12.1.0/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
   32 | #error This file requires compiler and library support \
      |  ^~~~~
p635.cpp:182:10: warning: identifier 'constexpr' is a keyword in C++11 [-Wc++11-compat]
  182 |   inline constexpr bool is_void_v = is_void<T>::value;
      |          ^~~~~~~~~
p635.cpp:370:70: warning: identifier 'noexcept' is a keyword in C++11 [-Wc++11-compat]
  370 |       constexpr bool is_pointer_interconvertible_with_class(M S::*m) noexcept;
      |                                                                      ^~~~~~~~
p635.cpp:31:7: error: expected unqualified-id before 'using'
   31 |       using bool_constant = integral_constant<bool, B>;
      |       ^~~~~
p635.cpp:32:11: error: expected nested-name-specifier before 'true_type'
   32 |     using true_type  = bool_constant<true>;
      |           ^~~~~~~~~
p635.cpp:33:11: error: expected nested-name-specifier before 'false_type'
   33 |     using false_type = bool_constant<false>;
      |           ^~~~~~~~~~
p635.cpp:53:24: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
   53 | template<class T, class... Args> struct is_constructible;
      |                        ^~~
p635.cpp:63:24: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
   63 | template<class T, class... Args> struct is_trivially_constructible;
      |                        ^~~
p635.cpp:71:24: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
   71 | template<class T, class... Args> struct is_nothrow_constructible;
      |                        ^~~
p635.cpp:95:25: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
   95 | template<class Fn, class... ArgTypes> struct is_invocable;
      |                         ^~~
p635.cpp:96:34: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
   96 | template<class R, class Fn, class... ArgTypes> struct is_invocable_r;
      |                                  ^~~
p635.cpp:97:25: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
   97 | template<class Fn, class... ArgTypes> struct is_nothrow_invocable;
      |                         ^~~
p635.cpp:98:34: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
   98 | template<class R, class Fn, class... ArgTypes> struct is_nothrow_invocable_r;
      |                                  ^~~
p635.cpp:102:3: error: expected unqualified-id before 'using'
  102 |   using remove_const_t    = typename remove_const<T>::type;
      |   ^~~~~
p635.cpp:104:3: error: expected unqualified-id before 'using'
  104 |   using remove_volatile_t = typename remove_volatile<T>::type;
      |   ^~~~~
p635.cpp:106:3: error: expected unqualified-id before 'using'
  106 |   using remove_cv_t = typename remove_cv<T>::type;
      |   ^~~~~
p635.cpp:108:3: error: expected unqualified-id before 'using'
  108 |   using add_const_t = typename add_const<T>::type;
      |   ^~~~~
p635.cpp:110:3: error: expected unqualified-id before 'using'
  110 |   using add_volatile_t = typename add_volatile<T>::type;
      |   ^~~~~
p635.cpp:112:3: error: expected unqualified-id before 'using'
  112 |   using add_cv_t = typename add_cv<T>::type;
      |   ^~~~~
p635.cpp:116:3: error: expected unqualified-id before 'using'
  116 |   using remove_reference_t     = typename remove_reference<T>::type;
      |   ^~~~~
p635.cpp:118:3: error: expected unqualified-id before 'using'
  118 |   using add_lvalue_reference_t = typename add_lvalue_reference<T>::type;
      |   ^~~~~
p635.cpp:120:3: error: expected unqualified-id before 'using'
  120 |   using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;
      |   ^~~~~
p635.cpp:125:3: error: expected unqualified-id before 'using'
  125 |   using make_signed_t   = typename make_signed<T>::type;
      |   ^~~~~
p635.cpp:127:3: error: expected unqualified-id before 'using'
  127 |   using make_unsigned_t = typename make_unsigned<T>::type;
      |   ^~~~~
p635.cpp:131:3: error: expected unqualified-id before 'using'
  131 |   using remove_extent_t      = typename remove_extent<T>::type;
      |   ^~~~~
p635.cpp:133:3: error: expected unqualified-id before 'using'
  133 |   using remove_all_extents_t = typename remove_all_extents<T>::type;
      |   ^~~~~
p635.cpp:137:3: error: expected unqualified-id before 'using'
  137 |   using remove_pointer_t = typename remove_pointer<T>::type;
      |   ^~~~~
p635.cpp:139:3: error: expected unqualified-id before 'using'
  139 |   using add_pointer_t    = typename add_pointer<T>::type;
      |   ^~~~~
p635.cpp:146:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  146 | template<class... T> struct common_type;
      |               ^~~
p635.cpp:149:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  149 | template<class... T> struct common_reference;
      |               ^~~
p635.cpp:151:25: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  151 | template<class Fn, class... ArgTypes> struct invoke_result;
      |                         ^~~
p635.cpp:155:3: error: expected unqualified-id before 'using'
  155 |   using type_identity_t = typename type_identity<T>::type;
      |   ^~~~~
p635.cpp:157:3: error: expected unqualified-id before 'using'
  157 |   using remove_cvref_t = typename remove_cvref<T>::type;
      |   ^~~~~
p635.cpp:159:3: error: expected unqualified-id before 'using'
  159 |   using decay_t = typename decay<T>::type;
      |   ^~~~~
p635.cpp:161:3: error: expected unqualified-id before 'using'
  161 |   using enable_if_t        = typename enable_if<b, T>::type;
      |   ^~~~~
p635.cpp:163:3: error: expected unqualified-id before 'using'
  163 |   using conditional_t      = typename conditional<b, T, F>::type;
      |   ^~~~~
p635.cpp:164:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  164 | template<class... T>
      |               ^~~
p635.cpp:165:3: error: expected unqualified-id before 'using'
  165 |   using common_type_t      = typename common_type<T...>::type;
      |   ^~~~~
p635.cpp:166:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  166 | template<class... T>
      |               ^~~
p635.cpp:167:3: error: expected unqualified-id before 'using'
  167 |   using common_reference_t = typename common_reference<T...>::type;
      |   ^~~~~
p635.cpp:169:3: error: expected unqualified-id before 'using'
  169 |   using underlying_type_t  = typename underlying_type<T>::type;
      |   ^~~~~
p635.cpp:170:25: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  170 | template<class Fn, class... ArgTypes>
      |                         ^~~
p635.cpp:171:3: error: expected unqualified-id before 'using'
  171 |   using invoke_result_t    = typename invoke_result<Fn, ArgTypes...>::type;
      |   ^~~~~
p635.cpp:173:3: error: expected unqualified-id before 'using'
  173 |   using unwrap_reference_t = typename unwrap_reference<T>::type;
      |   ^~~~~
p635.cpp:175:3: error: expected unqualified-id before 'using'
  175 |   using unwrap_ref_decay_t = typename unwrap_ref_decay<T>::type;
      |   ^~~~~
p635.cpp:176:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  176 | template<class...>
      |               ^~~
p635.cpp:177:3: error: expected unqualified-id before 'using'
  177 |   using void_t             = void;
      |   ^~~~~
p635.cpp:179:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  179 | template<class... B> struct conjunction; template<class... B> struct disjunction; template<class B> struct negation;
      |               ^~~
p635.cpp:179:56: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  179 | template<class... B> struct conjunction; template<class... B> struct disjunction; template<class B> struct negation;
      |                                                        ^~~
p635.cpp:182:10: error: 'constexpr' does not name a type
  182 |   inline constexpr bool is_void_v = is_void<T>::value;
      |          ^~~~~~~~~
p635.cpp:182:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:184:10: error: 'constexpr' does not name a type
  184 |   inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
      |          ^~~~~~~~~
p635.cpp:184:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:186:10: error: 'constexpr' does not name a type
  186 |   inline constexpr bool is_integral_v = is_integral<T>::value;
      |          ^~~~~~~~~
p635.cpp:186:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:188:10: error: 'constexpr' does not name a type
  188 |   inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
      |          ^~~~~~~~~
p635.cpp:188:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:190:10: error: 'constexpr' does not name a type
  190 |   inline constexpr bool is_array_v = is_array<T>::value;
      |          ^~~~~~~~~
p635.cpp:190:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:192:10: error: 'constexpr' does not name a type
  192 |   inline constexpr bool is_pointer_v = is_pointer<T>::value;
      |          ^~~~~~~~~
p635.cpp:192:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:194:10: error: 'constexpr' does not name a type
  194 |   inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
      |          ^~~~~~~~~
p635.cpp:194:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:196:10: error: 'constexpr' does not name a type
  196 |   inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
      |          ^~~~~~~~~
p635.cpp:196:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:198:10: error: 'constexpr' does not name a type
  198 |   inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
      |          ^~~~~~~~~
p635.cpp:198:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:200:10: error: 'constexpr' does not name a type
  200 |   inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
      |          ^~~~~~~~~
p635.cpp:200:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:202:10: error: 'constexpr' does not name a type
  202 |   inline constexpr bool is_enum_v = is_enum<T>::value;
      |          ^~~~~~~~~
p635.cpp:202:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:204:10: error: 'constexpr' does not name a type
  204 |   inline constexpr bool is_union_v = is_union<T>::value;
      |          ^~~~~~~~~
p635.cpp:204:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:206:10: error: 'constexpr' does not name a type
  206 |   inline constexpr bool is_class_v = is_class<T>::value;
      |          ^~~~~~~~~
p635.cpp:206:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:208:10: error: 'constexpr' does not name a type
  208 |   inline constexpr bool is_function_v = is_function<T>::value;
      |          ^~~~~~~~~
p635.cpp:208:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:211:10: error: 'constexpr' does not name a type
  211 |   inline constexpr bool is_reference_v = is_reference<T>::value;
      |          ^~~~~~~~~
p635.cpp:211:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:213:10: error: 'constexpr' does not name a type
  213 |   inline constexpr bool is_arithmetic_v = is_arithmetic<T>::value;
      |          ^~~~~~~~~
p635.cpp:213:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:215:10: error: 'constexpr' does not name a type
  215 |   inline constexpr bool is_fundamental_v = is_fundamental<T>::value;
      |          ^~~~~~~~~
p635.cpp:215:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:217:10: error: 'constexpr' does not name a type
  217 |   inline constexpr bool is_object_v = is_object<T>::value;
      |          ^~~~~~~~~
p635.cpp:217:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:219:10: error: 'constexpr' does not name a type
  219 |   inline constexpr bool is_scalar_v = is_scalar<T>::value;
      |          ^~~~~~~~~
p635.cpp:219:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:221:10: error: 'constexpr' does not name a type
  221 |   inline constexpr bool is_compound_v = is_compound<T>::value;
      |          ^~~~~~~~~
p635.cpp:221:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:223:10: error: 'constexpr' does not name a type
  223 |   inline constexpr bool is_member_pointer_v = is_member_pointer<T>::value;
      |          ^~~~~~~~~
p635.cpp:223:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:226:10: error: 'constexpr' does not name a type
  226 |   inline constexpr bool is_const_v = is_const<T>::value;
      |          ^~~~~~~~~
p635.cpp:226:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:228:10: error: 'constexpr' does not name a type
  228 |   inline constexpr bool is_volatile_v = is_volatile<T>::value;
      |          ^~~~~~~~~
p635.cpp:228:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:230:10: error: 'constexpr' does not name a type
  230 |   inline constexpr bool is_trivial_v = is_trivial<T>::value;
      |          ^~~~~~~~~
p635.cpp:230:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:232:10: error: 'constexpr' does not name a type
  232 |   inline constexpr bool is_trivially_copyable_v = is_trivially_copyable<T>::value;
      |          ^~~~~~~~~
p635.cpp:232:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:234:10: error: 'constexpr' does not name a type
  234 |   inline constexpr bool is_standard_layout_v = is_standard_layout<T>::value;
      |          ^~~~~~~~~
p635.cpp:234:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:236:10: error: 'constexpr' does not name a type
  236 |   inline constexpr bool is_empty_v = is_empty<T>::value;
      |          ^~~~~~~~~
p635.cpp:236:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:238:10: error: 'constexpr' does not name a type
  238 |   inline constexpr bool is_polymorphic_v = is_polymorphic<T>::value;
      |          ^~~~~~~~~
p635.cpp:238:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:240:10: error: 'constexpr' does not name a type
  240 |   inline constexpr bool is_abstract_v = is_abstract<T>::value;
      |          ^~~~~~~~~
p635.cpp:240:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:242:10: error: 'constexpr' does not name a type
  242 |   inline constexpr bool is_final_v = is_final<T>::value;
      |          ^~~~~~~~~
p635.cpp:242:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:244:10: error: 'constexpr' does not name a type
  244 |   inline constexpr bool is_aggregate_v = is_aggregate<T>::value;
      |          ^~~~~~~~~
p635.cpp:244:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:246:10: error: 'constexpr' does not name a type
  246 |   inline constexpr bool is_signed_v = is_signed<T>::value;
      |          ^~~~~~~~~
p635.cpp:246:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:248:10: error: 'constexpr' does not name a type
  248 |   inline constexpr bool is_unsigned_v = is_unsigned<T>::value;
      |          ^~~~~~~~~
p635.cpp:248:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:250:10: error: 'constexpr' does not name a type
  250 |   inline constexpr bool is_bounded_array_v = is_bounded_array<T>::value;
      |          ^~~~~~~~~
p635.cpp:250:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:252:10: error: 'constexpr' does not name a type
  252 |   inline constexpr bool is_unbounded_array_v = is_unbounded_array<T>::value;
      |          ^~~~~~~~~
p635.cpp:252:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:254:10: error: 'constexpr' does not name a type
  254 |   inline constexpr bool is_scoped_enum_v = is_scoped_enum<T>::value;
      |          ^~~~~~~~~
p635.cpp:254:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:255:24: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  255 | template<class T, class... Args>
      |                        ^~~
p635.cpp:256:10: error: 'constexpr' does not name a type
  256 |   inline constexpr bool is_constructible_v = is_constructible<T, Args...>::value;
      |          ^~~~~~~~~
p635.cpp:256:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:258:10: error: 'constexpr' does not name a type
  258 |   inline constexpr bool is_default_constructible_v = is_default_constructible<T>::value;
      |          ^~~~~~~~~
p635.cpp:258:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:260:10: error: 'constexpr' does not name a type
  260 |   inline constexpr bool is_copy_constructible_v = is_copy_constructible<T>::value;
      |          ^~~~~~~~~
p635.cpp:260:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:262:10: error: 'constexpr' does not name a type
  262 |   inline constexpr bool is_move_constructible_v = is_move_constructible<T>::value;
      |          ^~~~~~~~~
p635.cpp:262:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:264:10: error: 'constexpr' does not name a type
  264 |   inline constexpr bool is_assignable_v = is_assignable<T, U>::value;
      |          ^~~~~~~~~
p635.cpp:264:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:266:10: error: 'constexpr' does not name a type
  266 |   inline constexpr bool is_copy_assignable_v = is_copy_assignable<T>::value;
      |          ^~~~~~~~~
p635.cpp:266:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:268:10: error: 'constexpr' does not name a type
  268 |   inline constexpr bool is_move_assignable_v = is_move_assignable<T>::value;
      |          ^~~~~~~~~
p635.cpp:268:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:270:10: error: 'constexpr' does not name a type
  270 |   inline constexpr bool is_swappable_with_v = is_swappable_with<T, U>::value;
      |          ^~~~~~~~~
p635.cpp:270:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:272:10: error: 'constexpr' does not name a type
  272 |   inline constexpr bool is_swappable_v = is_swappable<T>::value;
      |          ^~~~~~~~~
p635.cpp:272:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:274:10: error: 'constexpr' does not name a type
  274 |   inline constexpr bool is_destructible_v = is_destructible<T>::value;
      |          ^~~~~~~~~
p635.cpp:274:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:275:24: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  275 | template<class T, class... Args>
      |                        ^~~
p635.cpp:276:10: error: 'constexpr' does not name a type
  276 |   inline constexpr bool is_trivially_constructible_v
      |          ^~~~~~~~~
p635.cpp:276:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:279:10: error: 'constexpr' does not name a type
  279 |   inline constexpr bool is_trivially_default_constructible_v
      |          ^~~~~~~~~
p635.cpp:279:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:282:10: error: 'constexpr' does not name a type
  282 |   inline constexpr bool is_trivially_copy_constructible_v
      |          ^~~~~~~~~
p635.cpp:282:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:285:10: error: 'constexpr' does not name a type
  285 |   inline constexpr bool is_trivially_move_constructible_v
      |          ^~~~~~~~~
p635.cpp:285:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:288:10: error: 'constexpr' does not name a type
  288 |   inline constexpr bool is_trivially_assignable_v = is_trivially_assignable<T, U>::value;
      |          ^~~~~~~~~
p635.cpp:288:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:290:10: error: 'constexpr' does not name a type
  290 |   inline constexpr bool is_trivially_copy_assignable_v
      |          ^~~~~~~~~
p635.cpp:290:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:293:10: error: 'constexpr' does not name a type
  293 |   inline constexpr bool is_trivially_move_assignable_v
      |          ^~~~~~~~~
p635.cpp:293:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:296:10: error: 'constexpr' does not name a type
  296 |   inline constexpr bool is_trivially_destructible_v = is_trivially_destructible<T>::value;
      |          ^~~~~~~~~
p635.cpp:296:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:297:24: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  297 | template<class T, class... Args>
      |                        ^~~
p635.cpp:298:10: error: 'constexpr' does not name a type
  298 |   inline constexpr bool is_nothrow_constructible_v
      |          ^~~~~~~~~
p635.cpp:298:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:301:10: error: 'constexpr' does not name a type
  301 |   inline constexpr bool is_nothrow_default_constructible_v
      |          ^~~~~~~~~
p635.cpp:301:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:304:10: error: 'constexpr' does not name a type
  304 |   inline constexpr bool is_nothrow_copy_constructible_v
      |          ^~~~~~~~~
p635.cpp:304:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:307:10: error: 'constexpr' does not name a type
  307 |   inline constexpr bool is_nothrow_move_constructible_v
      |          ^~~~~~~~~
p635.cpp:307:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:310:10: error: 'constexpr' does not name a type
  310 |   inline constexpr bool is_nothrow_assignable_v = is_nothrow_assignable<T, U>::value;
      |          ^~~~~~~~~
p635.cpp:310:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:312:10: error: 'constexpr' does not name a type
  312 |   inline constexpr bool is_nothrow_copy_assignable_v = is_nothrow_copy_assignable<T>::value;
      |          ^~~~~~~~~
p635.cpp:312:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:314:10: error: 'constexpr' does not name a type
  314 |   inline constexpr bool is_nothrow_move_assignable_v = is_nothrow_move_assignable<T>::value;
      |          ^~~~~~~~~
p635.cpp:314:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:316:10: error: 'constexpr' does not name a type
  316 |   inline constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with<T, U>::value;
      |          ^~~~~~~~~
p635.cpp:316:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:318:10: error: 'constexpr' does not name a type
  318 |   inline constexpr bool is_nothrow_swappable_v = is_nothrow_swappable<T>::value;
      |          ^~~~~~~~~
p635.cpp:318:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:320:10: error: 'constexpr' does not name a type
  320 |   inline constexpr bool is_nothrow_destructible_v = is_nothrow_destructible<T>::value;
      |          ^~~~~~~~~
p635.cpp:320:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:322:10: error: 'constexpr' does not name a type
  322 |   inline constexpr bool has_virtual_destructor_v = has_virtual_destructor<T>::value;
      |          ^~~~~~~~~
p635.cpp:322:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:324:10: error: 'constexpr' does not name a type
  324 |   inline constexpr bool has_unique_object_representations_v
      |          ^~~~~~~~~
p635.cpp:324:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:327:10: error: 'constexpr' does not name a type
  327 |   inline constexpr bool reference_constructs_from_temporary_v
      |          ^~~~~~~~~
p635.cpp:327:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:330:10: error: 'constexpr' does not name a type
  330 |   inline constexpr bool reference_converts_from_temporary_v
      |          ^~~~~~~~~
p635.cpp:330:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:334:10: error: 'constexpr' does not name a type
  334 |   inline constexpr size_t alignment_of_v = alignment_of<T>::value;
      |          ^~~~~~~~~
p635.cpp:334:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:336:10: error: 'constexpr' does not name a type
  336 |   inline constexpr size_t rank_v = rank<T>::value;
      |          ^~~~~~~~~
p635.cpp:336:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:338:10: error: 'constexpr' does not name a type
  338 |   inline constexpr size_t extent_v = extent<T, I>::value;
      |          ^~~~~~~~~
p635.cpp:338:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:341:10: error: 'constexpr' does not name a type
  341 |   inline constexpr bool is_same_v = is_same<T, U>::value;
      |          ^~~~~~~~~
p635.cpp:341:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:343:10: error: 'constexpr' does not name a type
  343 |   inline constexpr bool is_base_of_v = is_base_of<Base, Derived>::value;
      |          ^~~~~~~~~
p635.cpp:343:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:345:10: error: 'constexpr' does not name a type
  345 |   inline constexpr bool is_convertible_v = is_convertible<From, To>::value;
      |          ^~~~~~~~~
p635.cpp:345:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:347:10: error: 'constexpr' does not name a type
  347 |   inline constexpr bool is_nothrow_convertible_v = is_nothrow_convertible<From, To>::value;
      |          ^~~~~~~~~
p635.cpp:347:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:349:10: error: 'constexpr' does not name a type
  349 |   inline constexpr bool is_layout_compatible_v = is_layout_compatible<T, U>::value;
      |          ^~~~~~~~~
p635.cpp:349:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:351:10: error: 'constexpr' does not name a type
  351 |   inline constexpr bool is_pointer_interconvertible_base_of_v
      |          ^~~~~~~~~
p635.cpp:351:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:353:25: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  353 | template<class Fn, class... ArgTypes>
      |                         ^~~
p635.cpp:354:10: error: 'constexpr' does not name a type
  354 |   inline constexpr bool is_invocable_v = is_invocable<Fn, ArgTypes...>::value;
      |          ^~~~~~~~~
p635.cpp:354:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:355:34: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  355 | template<class R, class Fn, class... ArgTypes>
      |                                  ^~~
p635.cpp:356:10: error: 'constexpr' does not name a type
  356 |   inline constexpr bool is_invocable_r_v = is_invocable_r<R, Fn, ArgTypes...>::value;
      |          ^~~~~~~~~
p635.cpp:356:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:357:25: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  357 | template<class Fn, class... ArgTypes>
      |                         ^~~
p635.cpp:358:10: error: 'constexpr' does not name a type
  358 |   inline constexpr bool is_nothrow_invocable_v = is_nothrow_invocable<Fn, ArgTypes...>::value;
      |          ^~~~~~~~~
p635.cpp:358:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:359:34: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  359 | template<class R, class Fn, class... ArgTypes>
      |                                  ^~~
p635.cpp:360:10: error: 'constexpr' does not name a type
  360 |   inline constexpr bool is_nothrow_invocable_r_v
      |          ^~~~~~~~~
p635.cpp:360:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:363:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  363 | template<class... B>
      |               ^~~
p635.cpp:364:10: error: 'constexpr' does not name a type
  364 |   inline constexpr bool conjunction_v = conjunction<B...>::value;
      |          ^~~~~~~~~
p635.cpp:364:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:365:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
  365 | template<class... B>
      |               ^~~
p635.cpp:366:10: error: 'constexpr' does not name a type
  366 |   inline constexpr bool disjunction_v = disjunction<B...>::value;
      |          ^~~~~~~~~
p635.cpp:366:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:368:10: error: 'constexpr' does not name a type
  368 |   inline constexpr bool negation_v = negation<B>::value;
      |          ^~~~~~~~~
p635.cpp:368:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:370:7: error: 'constexpr' does not name a type
  370 |       constexpr bool is_pointer_interconvertible_with_class(M S::*m) noexcept;
      |       ^~~~~~~~~
p635.cpp:370:7: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:372:7: error: 'constexpr' does not name a type
  372 |       constexpr bool is_corresponding_member(M1 S1::*m1, M2 S2::*m2) noexcept;
      |       ^~~~~~~~~
p635.cpp:372:7: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:374:5: error: 'constexpr' does not name a type
  374 |     constexpr bool is_constant_evaluated() noexcept;
      |     ^~~~~~~~~
p635.cpp:374:5: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'

$ g++ p635.cpp -std=2b -o p635g -I. -Wall
p635.cpp:87:32: error: redefinition of default argument for 'unsigned int I'
   87 | template<class T, unsigned I = 0> struct extent;
      |                                ^
In file included from /usr/local/include/c++/12.1.0/bits/move.h:57,
                 from /usr/local/include/c++/12.1.0/bits/exception_ptr.h:43,
                 from /usr/local/include/c++/12.1.0/exception:168,
                 from /usr/local/include/c++/12.1.0/ios:39,
                 from /usr/local/include/c++/12.1.0/ostream:38,
                 from /usr/local/include/c++/12.1.0/iostream:39,
                 from p635.cpp:10:
/usr/local/include/c++/12.1.0/type_traits:843:33: note: original definition appeared here
  843 |   template<typename, unsigned = 0>
      |                                 ^
p635.cpp:144:16: error: redefinition of default argument for 'class T'
  144 | template<bool, class T = void> struct enable_if;
      |                ^~~~~
/usr/local/include/c++/12.1.0/type_traits:2227:18: note: original definition appeared here
 2227 |   template<bool, typename _Tp = void>
      |                  ^~~~~~~~
p635.cpp:148:10: error: redefinition of 'struct std::basic_common_reference<_Tp, _Up, _TQual, _UQual>'
  148 |   struct basic_common_reference { };
      |          ^~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3587:12: note: previous definition of 'struct std::basic_common_reference<_Tp, _Up, _TQual, _UQual>'
 3587 |     struct basic_common_reference
      |            ^~~~~~~~~~~~~~~~~~~~~~
p635.cpp:182:25: error: redefinition of 'template<class T> constexpr const bool std::is_void_v'
  182 |   inline constexpr bool is_void_v = is_void<T>::value;
      |                         ^~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3120:25: note: 'template<class _Tp> constexpr const bool std::is_void_v<_Tp>' previously declared here
 3120 |   inline constexpr bool is_void_v = is_void<_Tp>::value;
      |                         ^~~~~~~~~
p635.cpp:184:25: error: redefinition of 'template<class T> constexpr const bool std::is_null_pointer_v'
  184 |   inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
      |                         ^~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3122:25: note: 'template<class _Tp> constexpr const bool std::is_null_pointer_v<_Tp>' previously declared here
 3122 |   inline constexpr bool is_null_pointer_v = is_null_pointer<_Tp>::value;
      |                         ^~~~~~~~~~~~~~~~~
p635.cpp:186:25: error: redefinition of 'template<class T> constexpr const bool std::is_integral_v'
  186 |   inline constexpr bool is_integral_v = is_integral<T>::value;
      |                         ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3124:25: note: 'template<class _Tp> constexpr const bool std::is_integral_v<_Tp>' previously declared here
 3124 |   inline constexpr bool is_integral_v = is_integral<_Tp>::value;
      |                         ^~~~~~~~~~~~~
p635.cpp:188:25: error: redefinition of 'template<class T> constexpr const bool std::is_floating_point_'
  188 |   inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3126:25: note: 'template<class _Tp> constexpr const bool std::is_floating_point_v<_Tp>' previously declared here
 3126 |   inline constexpr bool is_floating_point_v = is_floating_point<_Tp>::value;
      |                         ^~~~~~~~~~~~~~~~~~~
p635.cpp:190:25: error: redefinition of 'template<class T> constexpr const bool std::is_array_v'
  190 |   inline constexpr bool is_array_v = is_array<T>::value;
      |                         ^~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3128:25: note: 'template<class _Tp> constexpr const bool std::is_array_v<_Tp>' previously declared here
 3128 |   inline constexpr bool is_array_v = is_array<_Tp>::value;
      |                         ^~~~~~~~~~
p635.cpp:192:25: error: redefinition of 'template<class T> constexpr const bool std::is_pointer_v'
  192 |   inline constexpr bool is_pointer_v = is_pointer<T>::value;
      |                         ^~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3130:25: note: 'template<class _Tp> constexpr const bool std::is_pointer_v<_Tp>' previously declared here
 3130 |   inline constexpr bool is_pointer_v = is_pointer<_Tp>::value;
      |                         ^~~~~~~~~~~~
p635.cpp:194:25: error: redefinition of 'template<class T> constexpr const bool std::is_lvalue_reference_v'
  194 |   inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3132:25: note: 'template<class _Tp> constexpr const bool std::is_lvalue_reference_v<_Tp>' previously declared here
 3132 |   inline constexpr bool is_lvalue_reference_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~
p635.cpp:196:25: error: redefinition of 'template<class T> constexpr const bool std::is_rvalue_reference_v'
  196 |   inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3135:25: note: 'template<class _Tp> constexpr const bool std::is_rvalue_reference_v<_Tp>' previously declared here
 3135 |   inline constexpr bool is_rvalue_reference_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~
p635.cpp:198:25: error: redefinition of 'template<class T> constexpr const bool std::is_member_object_pointer_v'
  198 |   inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3138:25: note: 'template<class _Tp> constexpr const bool std::is_member_object_pointer_v<_Tp>' previously declared here
 3138 |   inline constexpr bool is_member_object_pointer_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:200:25: error: redefinition of 'template<class T> constexpr const bool std::is_member_function_pointer_v'
  200 |   inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3141:25: note: 'template<class _Tp> constexpr const bool std::is_member_function_pointer_v<_Tp>' previously declared here
 3141 |   inline constexpr bool is_member_function_pointer_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:202:25: error: redefinition of 'template<class T> constexpr const bool std::is_enum_v'
  202 |   inline constexpr bool is_enum_v = is_enum<T>::value;
      |                         ^~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3144:25: note: 'template<class _Tp> constexpr const bool std::is_enum_v<_Tp>' previously declared here
 3144 |   inline constexpr bool is_enum_v = is_enum<_Tp>::value;
      |                         ^~~~~~~~~
p635.cpp:204:25: error: redefinition of 'template<class T> constexpr const bool std::is_union_v'
  204 |   inline constexpr bool is_union_v = is_union<T>::value;
      |                         ^~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3146:25: note: 'template<class _Tp> constexpr const bool std::is_union_v<_Tp>' previously declared here
 3146 |   inline constexpr bool is_union_v = is_union<_Tp>::value;
      |                         ^~~~~~~~~~
p635.cpp:206:25: error: redefinition of 'template<class T> constexpr const bool std::is_class_v'
  206 |   inline constexpr bool is_class_v = is_class<T>::value;
      |                         ^~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3148:25: note: 'template<class _Tp> constexpr const bool std::is_class_v<_Tp>' previously declared here
 3148 |   inline constexpr bool is_class_v = is_class<_Tp>::value;
      |                         ^~~~~~~~~~
p635.cpp:208:25: error: redefinition of 'template<class T> constexpr const bool std::is_function_v'
  208 |   inline constexpr bool is_function_v = is_function<T>::value;
      |                         ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3150:25: note: 'template<class _Tp> constexpr const bool std::is_function_v<_Tp>' previously declared here
 3150 |   inline constexpr bool is_function_v = is_function<_Tp>::value;
      |                         ^~~~~~~~~~~~~
p635.cpp:211:25: error: redefinition of 'template<class T> constexpr const bool std::is_reference_v'
  211 |   inline constexpr bool is_reference_v = is_reference<T>::value;
      |                         ^~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3152:25: note: 'template<class _Tp> constexpr const bool std::is_reference_v<_Tp>' previously declared here
 3152 |   inline constexpr bool is_reference_v = is_reference<_Tp>::value;
      |                         ^~~~~~~~~~~~~~
p635.cpp:213:25: error: redefinition of 'template<class T> constexpr const bool std::is_arithmetic_v'
  213 |   inline constexpr bool is_arithmetic_v = is_arithmetic<T>::value;
      |                         ^~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3154:25: note: 'template<class _Tp> constexpr const bool std::is_arithmetic_v<_Tp>' previously declared here
 3154 |   inline constexpr bool is_arithmetic_v = is_arithmetic<_Tp>::value;
      |                         ^~~~~~~~~~~~~~~
p635.cpp:215:25: error: redefinition of 'template<class T> constexpr const bool std::is_fundamental_v'
  215 |   inline constexpr bool is_fundamental_v = is_fundamental<T>::value;
      |                         ^~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3156:25: note: 'template<class _Tp> constexpr const bool std::is_fundamental_v<_Tp>' previously declared here
 3156 |   inline constexpr bool is_fundamental_v = is_fundamental<_Tp>::value;
      |                         ^~~~~~~~~~~~~~~~
p635.cpp:217:25: error: redefinition of 'template<class T> constexpr const bool std::is_object_v'
  217 |   inline constexpr bool is_object_v = is_object<T>::value;
      |                         ^~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3158:25: note: 'template<class _Tp> constexpr const bool std::is_object_v<_Tp>' previously declared here
 3158 |   inline constexpr bool is_object_v = is_object<_Tp>::value;
      |                         ^~~~~~~~~~~
p635.cpp:219:25: error: redefinition of 'template<class T> constexpr const bool std::is_scalar_v'
  219 |   inline constexpr bool is_scalar_v = is_scalar<T>::value;
      |                         ^~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3160:25: note: 'template<class _Tp> constexpr const bool std::is_scalar_v<_Tp>' previously declared here
 3160 |   inline constexpr bool is_scalar_v = is_scalar<_Tp>::value;
      |                         ^~~~~~~~~~~
p635.cpp:221:25: error: redefinition of 'template<class T> constexpr const bool std::is_compound_v'
  221 |   inline constexpr bool is_compound_v = is_compound<T>::value;
      |                         ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3162:25: note: 'template<class _Tp> constexpr const bool std::is_compound_v<_Tp>' previously declared here
 3162 |   inline constexpr bool is_compound_v = is_compound<_Tp>::value;
      |                         ^~~~~~~~~~~~~
p635.cpp:223:25: error: redefinition of 'template<class T> constexpr const bool std::is_member_pointer_'
  223 |   inline constexpr bool is_member_pointer_v = is_member_pointer<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3164:25: note: 'template<class _Tp> constexpr const bool std::is_member_pointer_v<_Tp>' previously declared here
 3164 |   inline constexpr bool is_member_pointer_v = is_member_pointer<_Tp>::value;
      |                         ^~~~~~~~~~~~~~~~~~~
p635.cpp:226:25: error: redefinition of 'template<class T> constexpr const bool std::is_const_v'
  226 |   inline constexpr bool is_const_v = is_const<T>::value;
      |                         ^~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3166:25: note: 'template<class _Tp> constexpr const bool std::is_const_v<_Tp>' previously declared here
 3166 |   inline constexpr bool is_const_v = is_const<_Tp>::value;
      |                         ^~~~~~~~~~
p635.cpp:228:25: error: redefinition of 'template<class T> constexpr const bool std::is_volatile_v'
  228 |   inline constexpr bool is_volatile_v = is_volatile<T>::value;
      |                         ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3168:25: note: 'template<class _Tp> constexpr const bool std::is_volatile_v<_Tp>' previously declared here
 3168 |   inline constexpr bool is_volatile_v = is_volatile<_Tp>::value;
      |                         ^~~~~~~~~~~~~
p635.cpp:230:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivial_v'
  230 |   inline constexpr bool is_trivial_v = is_trivial<T>::value;
      |                         ^~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3170:25: note: 'template<class _Tp> constexpr const bool std::is_trivial_v<_Tp>' previously declared here
 3170 |   inline constexpr bool is_trivial_v = is_trivial<_Tp>::value;
      |                         ^~~~~~~~~~~~
p635.cpp:232:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivially_copyable_v'
  232 |   inline constexpr bool is_trivially_copyable_v = is_trivially_copyable<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3172:25: note: 'template<class _Tp> constexpr const bool std::is_trivially_copyable_v<_Tp>' previously declared here
 3172 |   inline constexpr bool is_trivially_copyable_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:234:25: error: redefinition of 'template<class T> constexpr const bool std::is_standard_layout_v'
  234 |   inline constexpr bool is_standard_layout_v = is_standard_layout<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3175:25: note: 'template<class _Tp> constexpr const bool std::is_standard_layout_v<_Tp>' previously declared here
 3175 |   inline constexpr bool is_standard_layout_v = is_standard_layout<_Tp>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~
p635.cpp:236:25: error: redefinition of 'template<class T> constexpr const bool std::is_empty_v'
  236 |   inline constexpr bool is_empty_v = is_empty<T>::value;
      |                         ^~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3186:25: note: 'template<class _Tp> constexpr const bool std::is_empty_v<_Tp>' previously declared here
 3186 |   inline constexpr bool is_empty_v = is_empty<_Tp>::value;
      |                         ^~~~~~~~~~
p635.cpp:238:25: error: redefinition of 'template<class T> constexpr const bool std::is_polymorphic_v'
  238 |   inline constexpr bool is_polymorphic_v = is_polymorphic<T>::value;
      |                         ^~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3188:25: note: 'template<class _Tp> constexpr const bool std::is_polymorphic_v<_Tp>' previously declared here
 3188 |   inline constexpr bool is_polymorphic_v = is_polymorphic<_Tp>::value;
      |                         ^~~~~~~~~~~~~~~~
p635.cpp:240:25: error: redefinition of 'template<class T> constexpr const bool std::is_abstract_v'
  240 |   inline constexpr bool is_abstract_v = is_abstract<T>::value;
      |                         ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3190:25: note: 'template<class _Tp> constexpr const bool std::is_abstract_v<_Tp>' previously declared here
 3190 |   inline constexpr bool is_abstract_v = is_abstract<_Tp>::value;
      |                         ^~~~~~~~~~~~~
p635.cpp:242:25: error: redefinition of 'template<class T> constexpr const bool std::is_final_v'
  242 |   inline constexpr bool is_final_v = is_final<T>::value;
      |                         ^~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3192:25: note: 'template<class _Tp> constexpr const bool std::is_final_v<_Tp>' previously declared here
 3192 |   inline constexpr bool is_final_v = is_final<_Tp>::value;
      |                         ^~~~~~~~~~
p635.cpp:244:25: error: redefinition of 'template<class T> constexpr const bool std::is_aggregate_v'
  244 |   inline constexpr bool is_aggregate_v = is_aggregate<T>::value;
      |                         ^~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3329:27: note: 'template<class _Tp> constexpr const bool std::is_aggregate_v<_Tp>' previously declared here
 3329 |     inline constexpr bool is_aggregate_v = is_aggregate<_Tp>::value;
      |                           ^~~~~~~~~~~~~~
p635.cpp:246:25: error: redefinition of 'template<class T> constexpr const bool std::is_signed_v'
  246 |   inline constexpr bool is_signed_v = is_signed<T>::value;
      |                         ^~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3194:25: note: 'template<class _Tp> constexpr const bool std::is_signed_v<_Tp>' previously declared here
 3194 |   inline constexpr bool is_signed_v = is_signed<_Tp>::value;
      |                         ^~~~~~~~~~~
p635.cpp:248:25: error: redefinition of 'template<class T> constexpr const bool std::is_unsigned_v'
  248 |   inline constexpr bool is_unsigned_v = is_unsigned<T>::value;
      |                         ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3196:25: note: 'template<class _Tp> constexpr const bool std::is_unsigned_v<_Tp>' previously declared here
 3196 |   inline constexpr bool is_unsigned_v = is_unsigned<_Tp>::value;
      |                         ^~~~~~~~~~~~~
p635.cpp:250:25: error: redefinition of 'template<class T> constexpr const bool std::is_bounded_array_v'
  250 |   inline constexpr bool is_bounded_array_v = is_bounded_array<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3418:27: note: 'template<class _Tp> constexpr const bool std::is_bounded_array_v<_Tp>' previously declared here
 3418 |     inline constexpr bool is_bounded_array_v
      |                           ^~~~~~~~~~~~~~~~~~
p635.cpp:252:25: error: redefinition of 'template<class T> constexpr const bool std::is_unbounded_array_v'
  252 |   inline constexpr bool is_unbounded_array_v = is_unbounded_array<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3424:27: note: 'template<class _Tp> constexpr const bool std::is_unbounded_array_v<_Tp>' previously declared here
 3424 |     inline constexpr bool is_unbounded_array_v
      |                           ^~~~~~~~~~~~~~~~~~~~
p635.cpp:254:25: error: redefinition of 'template<class T> constexpr const bool std::is_scoped_enum_v'
  254 |   inline constexpr bool is_scoped_enum_v = is_scoped_enum<T>::value;
      |                         ^~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3509:27: note: 'template<class _Tp> constexpr const bool std::is_scoped_enum_v<_Tp>' previously declared here
 3509 |     inline constexpr bool is_scoped_enum_v = is_scoped_enum<_Tp>::value;
      |                           ^~~~~~~~~~~~~~~~
p635.cpp:256:25: error: redefinition of 'template<class T, class ... Args> constexpr const bool std::is_constructible_v'
  256 |   inline constexpr bool is_constructible_v = is_constructible<T, Args...>::value;
      |                         ^~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3198:25: note: 'template<class _Tp, class ... _Args> constexpr const bool std::is_constructible_v<_Tp, _Args ...>' previously declared here
 3198 |   inline constexpr bool is_constructible_v =
      |                         ^~~~~~~~~~~~~~~~~~
p635.cpp:258:25: error: redefinition of 'template<class T> constexpr const bool std::is_default_constructible_v'
  258 |   inline constexpr bool is_default_constructible_v = is_default_constructible<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3201:25: note: 'template<class _Tp> constexpr const bool std::is_default_constructible_v<_Tp>' previously declared here
 3201 |   inline constexpr bool is_default_constructible_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:260:25: error: redefinition of 'template<class T> constexpr const bool std::is_copy_constructible_v'
  260 |   inline constexpr bool is_copy_constructible_v = is_copy_constructible<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3204:25: note: 'template<class _Tp> constexpr const bool std::is_copy_constructible_v<_Tp>' previously declared here
 3204 |   inline constexpr bool is_copy_constructible_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:262:25: error: redefinition of 'template<class T> constexpr const bool std::is_move_constructible_v'
  262 |   inline constexpr bool is_move_constructible_v = is_move_constructible<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3207:25: note: 'template<class _Tp> constexpr const bool std::is_move_constructible_v<_Tp>' previously declared here
 3207 |   inline constexpr bool is_move_constructible_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:264:25: error: redefinition of 'template<class T, class U> constexpr const bool std::is_assignable_v'
  264 |   inline constexpr bool is_assignable_v = is_assignable<T, U>::value;
      |                         ^~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3210:25: note: 'template<class _Tp, class _Up> constexpr const bool std::is_assignable_v<_Tp, _Up>' previously declared here
 3210 |   inline constexpr bool is_assignable_v = is_assignable<_Tp, _Up>::value;
      |                         ^~~~~~~~~~~~~~~
p635.cpp:266:25: error: redefinition of 'template<class T> constexpr const bool std::is_copy_assignable_v'
  266 |   inline constexpr bool is_copy_assignable_v = is_copy_assignable<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3212:25: note: 'template<class _Tp> constexpr const bool std::is_copy_assignable_v<_Tp>' previously declared here
 3212 |   inline constexpr bool is_copy_assignable_v = is_copy_assignable<_Tp>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~
p635.cpp:268:25: error: redefinition of 'template<class T> constexpr const bool std::is_move_assignable_v'
  268 |   inline constexpr bool is_move_assignable_v = is_move_assignable<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3214:25: note: 'template<class _Tp> constexpr const bool std::is_move_assignable_v<_Tp>' previously declared here
 3214 |   inline constexpr bool is_move_assignable_v = is_move_assignable<_Tp>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~
p635.cpp:270:25: error: redefinition of 'template<class T, class U> constexpr const bool std::is_swappable_with_v'
  270 |   inline constexpr bool is_swappable_with_v = is_swappable_with<T, U>::value;
      |                         ^~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:2891:38: note: 'template<class _Tp, class _Up> constexpr const bool std::is_swappable_with_v<_Tp, _Up>' previously declared here
 2891 |     _GLIBCXX17_INLINE constexpr bool is_swappable_with_v =
      |                                      ^~~~~~~~~~~~~~~~~~~
p635.cpp:272:25: error: redefinition of 'template<class T> constexpr const bool std::is_swappable_v'
  272 |   inline constexpr bool is_swappable_v = is_swappable<T>::value;
      |                         ^~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:2795:38: note: 'template<class _Tp> constexpr const bool std::is_swappable_v<_Tp>' previously declared here
 2795 |     _GLIBCXX17_INLINE constexpr bool is_swappable_v =
      |                                      ^~~~~~~~~~~~~~
p635.cpp:274:25: error: redefinition of 'template<class T> constexpr const bool std::is_destructible_v'
  274 |   inline constexpr bool is_destructible_v = is_destructible<T>::value;
      |                         ^~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3216:25: note: 'template<class _Tp> constexpr const bool std::is_destructible_v<_Tp>' previously declared here
 3216 |   inline constexpr bool is_destructible_v = is_destructible<_Tp>::value;
      |                         ^~~~~~~~~~~~~~~~~
p635.cpp:276:25: error: redefinition of 'template<class T, class ... Args> constexpr const bool std::is_trivially_constructible_v'
  276 |   inline constexpr bool is_trivially_constructible_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3218:25: note: 'template<class _Tp, class ... _Args> constexpr const bool std::is_trivially_constructible_v<_Tp, _Args ...>' previously declared here
 3218 |   inline constexpr bool is_trivially_constructible_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:279:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivially_default_constructible_v'
  279 |   inline constexpr bool is_trivially_default_constructible_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3221:25: note: 'template<class _Tp> constexpr const bool std::is_trivially_default_constructible_v<_Tp>' previously declared here
 3221 |   inline constexpr bool is_trivially_default_constructible_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:282:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivially_copy_constructible_v'
  282 |   inline constexpr bool is_trivially_copy_constructible_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3224:25: note: 'template<class _Tp> constexpr const bool std::is_trivially_copy_constructible_v<_Tp>' previously declared here
 3224 |   inline constexpr bool is_trivially_copy_constructible_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:285:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivially_move_constructible_v'
  285 |   inline constexpr bool is_trivially_move_constructible_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3227:25: note: 'template<class _Tp> constexpr const bool std::is_trivially_move_constructible_v<_Tp>' previously declared here
 3227 |   inline constexpr bool is_trivially_move_constructible_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:288:25: error: redefinition of 'template<class T, class U> constexpr const bool std::is_trivially_assignable_v'
  288 |   inline constexpr bool is_trivially_assignable_v = is_trivially_assignable<T, U>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3230:25: note: 'template<class _Tp, class _Up> constexpr const bool std::is_trivially_assignable_v<_Tp, _Up>' previously declared here
 3230 |   inline constexpr bool is_trivially_assignable_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:290:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivially_copy_assignable_v'
  290 |   inline constexpr bool is_trivially_copy_assignable_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3233:25: note: 'template<class _Tp> constexpr const bool std::is_trivially_copy_assignable_v<_Tp>' previously declared here
 3233 |   inline constexpr bool is_trivially_copy_assignable_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:293:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivially_move_assignable_v'
  293 |   inline constexpr bool is_trivially_move_assignable_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3236:25: note: 'template<class _Tp> constexpr const bool std::is_trivially_move_assignable_v<_Tp>' previously declared here
 3236 |   inline constexpr bool is_trivially_move_assignable_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:296:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivially_destructible_v'
  296 |   inline constexpr bool is_trivially_destructible_v = is_trivially_destructible<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3239:25: note: 'template<class _Tp> constexpr const bool std::is_trivially_destructible_v<_Tp>' previously declared here
 3239 |   inline constexpr bool is_trivially_destructible_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:298:25: error: redefinition of 'template<class T, class ... Args> constexpr const bool std::is_nothrow_constructible_v'
  298 |   inline constexpr bool is_nothrow_constructible_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3242:25: note: 'template<class _Tp, class ... _Args> constexpr const bool std::is_nothrow_constructible_v<_Tp, _Args ...>' previously declared here
 3242 |   inline constexpr bool is_nothrow_constructible_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:301:25: error: redefinition of 'template<class T> constexpr const bool std::is_nothrow_default_constructible_v'
  301 |   inline constexpr bool is_nothrow_default_constructible_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3245:25: note: 'template<class _Tp> constexpr const bool std::is_nothrow_default_constructible_v<_Tp>' previously declared here
 3245 |   inline constexpr bool is_nothrow_default_constructible_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:304:25: error: redefinition of 'template<class T> constexpr const bool std::is_nothrow_copy_constructible_v'
  304 |   inline constexpr bool is_nothrow_copy_constructible_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3248:25: note: 'template<class _Tp> constexpr const bool std::is_nothrow_copy_constructible_v<_Tp>' previously declared here
 3248 |   inline constexpr bool is_nothrow_copy_constructible_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:307:25: error: redefinition of 'template<class T> constexpr const bool std::is_nothrow_move_constructible_v'
  307 |   inline constexpr bool is_nothrow_move_constructible_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3251:25: note: 'template<class _Tp> constexpr const bool std::is_nothrow_move_constructible_v<_Tp>' previously declared here
 3251 |   inline constexpr bool is_nothrow_move_constructible_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:310:25: error: redefinition of 'template<class T, class U> constexpr const bool std::is_nothrow_assignable_v'
  310 |   inline constexpr bool is_nothrow_assignable_v = is_nothrow_assignable<T, U>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3254:25: note: 'template<class _Tp, class _Up> constexpr const bool std::is_nothrow_assignable_v<_Tp, _Up>' previously declared here
 3254 |   inline constexpr bool is_nothrow_assignable_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:312:25: error: redefinition of 'template<class T> constexpr const bool std::is_nothrow_copy_assignable_v'
  312 |   inline constexpr bool is_nothrow_copy_assignable_v = is_nothrow_copy_assignable<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3257:25: note: 'template<class _Tp> constexpr const bool std::is_nothrow_copy_assignable_v<_Tp>' previously declared here
 3257 |   inline constexpr bool is_nothrow_copy_assignable_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:314:25: error: redefinition of 'template<class T> constexpr const bool std::is_nothrow_move_assignable_v'
  314 |   inline constexpr bool is_nothrow_move_assignable_v = is_nothrow_move_assignable<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3260:25: note: 'template<class _Tp> constexpr const bool std::is_nothrow_move_assignable_v<_Tp>' previously declared here
 3260 |   inline constexpr bool is_nothrow_move_assignable_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:316:25: error: redefinition of 'template<class T, class U> constexpr const bool std::is_nothrow_swappable_with_v'
  316 |   inline constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with<T, U>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:2896:38: note: 'template<class _Tp, class _Up> constexpr const bool std::is_nothrow_swappable_with_v<_Tp, _Up>' previously declared here
 2896 |     _GLIBCXX17_INLINE constexpr bool is_nothrow_swappable_with_v =
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:318:25: error: redefinition of 'template<class T> constexpr const bool std::is_nothrow_swappable_v'
  318 |   inline constexpr bool is_nothrow_swappable_v = is_nothrow_swappable<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:2800:38: note: 'template<class _Tp> constexpr const bool std::is_nothrow_swappable_v<_Tp>' previously declared here
 2800 |     _GLIBCXX17_INLINE constexpr bool is_nothrow_swappable_v =
      |                                      ^~~~~~~~~~~~~~~~~~~~~~
p635.cpp:320:25: error: redefinition of 'template<class T> constexpr const bool std::is_nothrow_destructible_v'
  320 |   inline constexpr bool is_nothrow_destructible_v = is_nothrow_destructible<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3263:25: note: 'template<class _Tp> constexpr const bool std::is_nothrow_destructible_v<_Tp>' previously declared here
 3263 |   inline constexpr bool is_nothrow_destructible_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:322:25: error: redefinition of 'template<class T> constexpr const bool std::has_virtual_destructor_v'
  322 |   inline constexpr bool has_virtual_destructor_v = has_virtual_destructor<T>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3266:25: note: 'template<class _Tp> constexpr const bool std::has_virtual_destructor_v<_Tp>' previously declared here
 3266 |   inline constexpr bool has_virtual_destructor_v =
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:324:25: error: redefinition of 'template<class T> constexpr const bool std::has_unique_object_representations_v'
  324 |   inline constexpr bool has_unique_object_representations_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3314:27: note: 'template<class _Tp> constexpr const bool std::has_unique_object_representations_v<_Tp>' previously declared here
 3314 |     inline constexpr bool has_unique_object_representations_v
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:334:27: error: redefinition of 'template<class T> constexpr const std::size_t std::alignment_of_v'
  334 |   inline constexpr size_t alignment_of_v = alignment_of<T>::value;
      |                           ^~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3269:27: note: 'template<class _Tp> constexpr const std::size_t std::alignment_of_v<_Tp>' previously declared here
 3269 |   inline constexpr size_t alignment_of_v = alignment_of<_Tp>::value;
      |                           ^~~~~~~~~~~~~~
p635.cpp:336:27: error: redefinition of 'template<class T> constexpr const std::size_t std::rank_v'
  336 |   inline constexpr size_t rank_v = rank<T>::value;
      |                           ^~~~~~
/usr/local/include/c++/12.1.0/type_traits:3271:27: note: 'template<class _Tp> constexpr const std::size_t std::rank_v<_Tp>' previously declared here
 3271 |   inline constexpr size_t rank_v = rank<_Tp>::value;
      |                           ^~~~~~
p635.cpp:338:27: error: redefinition of 'template<class T, unsigned int I> constexpr const std::size_t std::extent_v'
  338 |   inline constexpr size_t extent_v = extent<T, I>::value;
      |                           ^~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3273:27: note: 'template<class _Tp, unsigned int _Idx> constexpr const std::size_t std::extent_v<_Tp, _Idx>' previously declared here
 3273 |   inline constexpr size_t extent_v = extent<_Tp, _Idx>::value;
      |                           ^~~~~~~~
p635.cpp:341:25: error: redefinition of 'template<class T, class U> constexpr const bool std::is_same_v'
  341 |   inline constexpr bool is_same_v = is_same<T, U>::value;
      |                         ^~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3276:25: note: 'template<class _Tp, class _Up> constexpr const bool std::is_same_v<_Tp, _Up>' previously declared here
 3276 |   inline constexpr bool is_same_v = __is_same(_Tp, _Up);
      |                         ^~~~~~~~~
p635.cpp:343:25: error: redefinition of 'template<class Base, class Derived> constexpr const bool std::is_base_of_v'
  343 |   inline constexpr bool is_base_of_v = is_base_of<Base, Derived>::value;
      |                         ^~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3282:25: note: 'template<class _Base, class _Derived> constexpr const bool std::is_base_of_v<_Base, _Derived>' previously declared here
 3282 |   inline constexpr bool is_base_of_v = is_base_of<_Base, _Derived>::value;
      |                         ^~~~~~~~~~~~
p635.cpp:345:25: error: redefinition of 'template<class From, class To> constexpr const bool std::is_convertible_v'
  345 |   inline constexpr bool is_convertible_v = is_convertible<From, To>::value;
      |                         ^~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3284:25: note: 'template<class _From, class _To> constexpr const bool std::is_convertible_v<_From, _To>' previously declared here
 3284 |   inline constexpr bool is_convertible_v = is_convertible<_From, _To>::value;
      |                         ^~~~~~~~~~~~~~~~
p635.cpp:347:25: error: redefinition of 'template<class From, class To> constexpr const bool std::is_nothrow_convertible_v'
  347 |   inline constexpr bool is_nothrow_convertible_v = is_nothrow_convertible<From, To>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:1536:27: note: 'template<class _From, class _To> constexpr const bool std::is_nothrow_convertible_v<_From, _To>' previously declared here
 1536 |     inline constexpr bool is_nothrow_convertible_v
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:349:25: error: redefinition of 'template<class T, class U> constexpr const bool std::is_layout_compatible_v'
  349 |   inline constexpr bool is_layout_compatible_v = is_layout_compatible<T, U>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3438:20: note: 'template<class _Tp, class _Up> constexpr const bool std::is_layout_compatible_v<_Tp, _Up>' previously declared here
 3438 |     constexpr bool is_layout_compatible_v
      |                    ^~~~~~~~~~~~~~~~~~~~~~
p635.cpp:351:25: error: redefinition of 'template<class Base, class Derived> constexpr const bool std::is_pointer_interconvertible_base_of_v'
  351 |   inline constexpr bool is_pointer_interconvertible_base_of_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3463:20: note: 'template<class _Base, class _Derived> constexpr const bool std::is_pointer_interconvertible_base_of_v<_Base, _Derived>' previously declared here
 3463 |     constexpr bool is_pointer_interconvertible_base_of_v
      |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:354:25: error: redefinition of 'template<class Fn, class ... ArgTypes> constexpr const bool std::is_invocable_v'
  354 |   inline constexpr bool is_invocable_v = is_invocable<Fn, ArgTypes...>::value;
      |                         ^~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3286:25: note: 'template<class _Fn, class ... _Args> constexpr const bool std::is_invocable_v<_Fn, _Args ...>' previously declared here
 3286 |   inline constexpr bool is_invocable_v = is_invocable<_Fn, _Args...>::value;
      |                         ^~~~~~~~~~~~~~
p635.cpp:356:25: error: redefinition of 'template<class R, class Fn, class ... ArgTypes> constexpr const bool std::is_invocable_r_v'
  356 |   inline constexpr bool is_invocable_r_v = is_invocable_r<R, Fn, ArgTypes...>::value;
      |                         ^~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3291:25: note: 'template<class _Ret, class _Fn, class ... _Args> constexpr const bool std::is_invocable_r_v<_Ret, _Fn, _Args ...>' previously declared here
 3291 |   inline constexpr bool is_invocable_r_v
      |                         ^~~~~~~~~~~~~~~~
p635.cpp:358:25: error: redefinition of 'template<class Fn, class ... ArgTypes> constexpr const bool std::is_nothrow_invocable_v'
  358 |   inline constexpr bool is_nothrow_invocable_v = is_nothrow_invocable<Fn, ArgTypes...>::value;
      |                         ^~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3288:25: note: 'template<class _Fn, class ... _Args> constexpr const bool std::is_nothrow_invocable_v<_Fn, _Args ...>' previously declared here
 3288 |   inline constexpr bool is_nothrow_invocable_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~
p635.cpp:360:25: error: redefinition of 'template<class R, class Fn, class ... ArgTypes> constexpr const bool std::is_nothrow_invocable_r_v'
  360 |   inline constexpr bool is_nothrow_invocable_r_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3294:25: note: 'template<class _Ret, class _Fn, class ... _Args> constexpr const bool std::is_nothrow_invocable_r_v<_Ret, _Fn, _Args ...>' previously declared here
 3294 |   inline constexpr bool is_nothrow_invocable_r_v
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:364:25: error: redefinition of 'template<class ... B> constexpr const bool std::conjunction_v'
  364 |   inline constexpr bool conjunction_v = conjunction<B...>::value;
      |                         ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:212:27: note: 'template<class ... _Bn> constexpr const bool std::conjunction_v<_Bn ...>' previously declared here
  212 |     inline constexpr bool conjunction_v = conjunction<_Bn...>::value;
      |                           ^~~~~~~~~~~~~
p635.cpp:366:25: error: redefinition of 'template<class ... B> constexpr const bool std::disjunction_v'
  366 |   inline constexpr bool disjunction_v = disjunction<B...>::value;
      |                         ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:215:27: note: 'template<class ... _Bn> constexpr const bool std::disjunction_v<_Bn ...>' previously declared here
  215 |     inline constexpr bool disjunction_v = disjunction<_Bn...>::value;
      |                           ^~~~~~~~~~~~~
p635.cpp:368:25: error: redefinition of 'template<class B> constexpr const bool std::negation_v'
  368 |   inline constexpr bool negation_v = negation<B>::value;
      |                         ^~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:218:27: note: 'template<class _Pp> constexpr const bool std::negation_v<_Pp>' previously declared here
  218 |     inline constexpr bool negation_v = negation<_Pp>::value;
      |                           ^~~~~~~~~~
p635.cpp:370:61: error: 'constexpr const bool std::is_pointer_interconvertible_with_class' redeclared as different kind of entity
  370 |       constexpr bool is_pointer_interconvertible_with_class(M S::*m) noexcept;
      |                                                             ^
/usr/local/include/c++/12.1.0/type_traits:3474:5: note: previous declaration 'template<class _Tp, class _Mem> constexpr bool std::is_pointer_interconvertible_with_class(_Mem _Tp::*)'
 3474 |     is_pointer_interconvertible_with_class(_Mem _Tp::*__mp) noexcept
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:370:61: error: 'M' was not declared in this scope
  370 |       constexpr bool is_pointer_interconvertible_with_class(M S::*m) noexcept;
      |                                                             ^

検討事項(agenda)

コンパイルエラーを取るか、コンパイルエラーの理由を解説する。

参考資料(reference)

cpprefjp - C++日本語リファレンス

コンパイラの実装状況

typedef は C++11 ではオワコン

C99からC++14を駆け抜けるC++講座

@kazuo_reve 私が効果を確認した「小川メソッド」

自己参照(self reference)

ockerにclang

docker gnu(gcc/g++) and llvm(clang/clang++)

コンパイル用shell script C版(clangとgcc)とC++版(clang++とg++)

C++N4910:2022 tag follower 200人超えました。ありがとうございます。

C++N4910:2022 tag follower 200人超えました。ありがとうございます。

コピペコンパイルエラーあるある

C++ Error Message Collection(1)does not name a type, 11 articles

dockerにclang

docker gnu(gcc/g++) and llvm(clang/clang++)

コンパイル用shell script C版(clangとgcc)とC++版(clang++とg++)

Compare the contents of C++N4910:2022, C++N4741:2018 and C++N4606:2015

C++ sample list

clang++, g++コンパイルエラー方針の違いの例

astyle 使ってみた

C++N4606 Working Draft 2016, ISO/IEC 14882, C++ standardのコード断片をコンパイルするためにしていること
https://qiita.com/kaizen_nagoya/items/a8d7ee2f2e29e76c19c1

コンパイル用shell script C版(clangとgcc)とC++版(clang++とg++)
https://qiita.com/kaizen_nagoya/items/74220c0577a512c2d7da

Clang/Clang++(LLVM) gcc/g++(GNU) コンパイラ警告等比較
https://qiita.com/kaizen_nagoya/items/9a82b958cc3aeef0403f

C++2003とC++2017でコンパイルエラーになるならない事例集
https://qiita.com/kaizen_nagoya/items/a13ea3823441c430edff

Qiitaに投稿するCのStyle例(暫定)
https://qiita.com/kaizen_nagoya/items/946df1528a6a1ef2bc0d

cpprefjpのdecltypeをコンパイル試験
https://qiita.com/kaizen_nagoya/items/090909af702f0d5d8a67

MISRA C++ 5-0-16
https://qiita.com/kaizen_nagoya/items/7df2d4e05db724752a74

C++ Templates Part1 BASICS Chapter 3. Class Templates 3.2 Use of Class Template Stack stack1test.cpp
https://qiita.com/kaizen_nagoya/items/cd5fc49106fad5a4e9ed

ISO/IEC TS 17961:2013 C Secure Coding Rules(1) All list(to be confirmed)
https://qiita.com/kaizen_nagoya/items/54e056195c4f11b850a1

C言語(C++)に対する誤解、曲解、無理解、爽快。
https://qiita.com/kaizen_nagoya/items/3f3992c9722c1cee2e3a

C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9

'wchar.h' file not found で困った clang++ macOS
https://qiita.com/kaizen_nagoya/items/de15cd46d657517fac11

Open POSIX Test Suiteの使い方を調べはじめました
https://qiita.com/kaizen_nagoya/items/644d5e407f5faf96e6dc

MISRA-C 2012 Referenceに掲載している文献の入手可能性を確認
https://qiita.com/kaizen_nagoya/items/96dc8b125e462d5575bb

どうやって MISRA Example Suiteをコンパイルするか
https://qiita.com/kaizen_nagoya/items/fbdbff5ff696e2ca7f00

MISRA C まとめ #include
https://qiita.com/kaizen_nagoya/items/f1a79a7cbd281607c7c9

「C++完全理解ガイド」の同意できること上位10
https://qiita.com/kaizen_nagoya/items/aa5744e0c4a8618c7671

DoCAP(ドゥーキャップ)って何ですか?

小川メソッド 覚え(書きかけ)

<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>

文書履歴(document history)

ver. 0.01 初稿  20220723

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?