multiplier icon indicating copy to clipboard operation
multiplier copied to clipboard

Possible Infinite loop during Token Alignment

Open kumarak opened this issue 1 year ago • 0 comments

I see a possible infinite loop while getting the align token for struct pair and its specializations. The backtrace for the thread is below:

* thread #55
    frame #0: 0x00000001016a47b6 mx-index`std::__1::vector<pasta::(anonymous namespace)::Region*, std::__1::allocator<pasta::(anonymous namespace)::Region*>>::empty[abi:v160006](this=0x0000600002be7d68 size=229) const at vector:552:10
    frame #1: 0x000000010169df3c mx-index`pasta::(anonymous namespace)::Matcher::BuildRegions(this=0x000070002bcdc0f8, regions=size=52837, err=0x000070002bcdc1f8, first=0x00007f9488e20000, after_last=0x00007f9489092800, list_kind="parsed") at AlignTokens.cpp:797:38
    frame #2: 0x000000010169b435 mx-index`pasta::PrintedTokenRangeImpl::AlignTokens(this=0x0000600001f00ef8, printed_range=0x0000600001f77498, root_context_id=0) at AlignTokens.cpp:1569:41
  * frame #3: 0x00000001016a0689 mx-index`pasta::PrintedTokenRange::Align(a=0x000070002bcdd2e8, b=0x000070002bcdcb40) at AlignTokens.cpp:1805:24
    frame #4: 0x00000001000b8537 mx-index`indexer::(anonymous namespace)::CreateParsedTokenRange(parsed_tokens=PrintedTokenRange @ 0x000070002bcdd2e8, root_decls=size=1926, child_decls=size=0, pp=0x000070002bcdd328) at IndexCompileJob.cpp:1736:14
    frame #5: 0x00000001000b25c1 mx-index`indexer::(anonymous namespace)::CreatePendingFragments(id_store=0x00007ff7bfeff158, em=0x000070002bcddc98, tok_range=0x000070002bcdd968, tu_id=(opaque = 6917531226664337410), group_range=size=3, main_file_path="/Users/akkumar/Documents/workspace/src/multiplier/tests/Cxx/AppendToVectorPre.cpp", pending_fragments=size=3159) at IndexCompileJob.cpp:2044:9
    frame #6: 0x00000001000a8632 mx-index`indexer::(anonymous namespace)::CreatePendingFragments(context=0x00007ff7bfeff0a0, em=0x000070002bcddc98, ast=0x000070002bcddc88, tu_id=(opaque = 6917531226664337410), decl_group_ranges=size=6040) at IndexCompileJob.cpp:2141:7
    frame #7: 0x00000001000a7119 mx-index`indexer::IndexCompileJobAction::Run(this=0x00006000005f8000) at IndexCompileJob.cpp:2325:7
    frame #8: 0x00000001000656cd mx-index`indexer::ExecutorImpl::Run(this=0x00007f9485704098) at Executor.cpp:159:15
    frame #9: 0x000000010006b902 mx-index`indexer::Executor::Start()::$_2::operator()(this=0x000070002bcddfa0, d_=0x00007f9485704098) const at Executor.cpp:263:17
    frame #10: 0x000000010006b8c9 mx-index`indexer::Executor::Start()::$_2::__invoke(d_=0x00007f9485704098) at Executor.cpp:260:10
    frame #11: 0x00007ff811d61202 libsystem_pthread.dylib`_pthread_start + 99
    frame #12: 0x00007ff811d5cbab libsystem_pthread.dylib`thread_start + 15

On frame 3 the parsed token and the printed token looks as follows:

parsed token:

(std::string) $11 = "template < class _T1 , class _T2 > struct __attribute__ ( ( __type_visibility__ ( \"default\" ) ) ) pair { typedef _T1 first_type ; typedef _T2 second_type ; _T1 first ; _T2 second ; pair ( pair const & ) = default ; pair ( pair && ) = default ; struct _CheckArgs { template < int & ... > static constexpr bool __enable_explicit_default ( ) { return is_default_constructible < _T1 > :: value && is_default_constructible < _T2 > :: value && ! __enable_implicit_default < > ( ) ; } template < int & ... > static constexpr bool __enable_implicit_default ( ) { return __is_implicitly_default_constructible < _T1 > :: value && __is_implicitly_default_constructible < _T2 > :: value ; } template < class _U1 , class _U2 > static constexpr bool __is_pair_constructible ( ) { return is_constructible < first_type , _U1 > :: value && is_constructible < second_type , _U2 > :: value ; } template < class _U1 , class _U2 > static constexpr bool __is_implicit ( ) { return is_convertible < _U1 , first_type > :: value && is_convertible < _U2 , second_type > :: value ; } template < class _U1 , class _U2 > static constexpr bool __enable_explicit ( ) { return __is_pair_constructible < _U1 , _U2 > ( ) && ! __is_implicit < _U1 , _U2 > ( ) ; } template < class _U1 , class _U2 > static constexpr bool __enable_implicit ( ) { return __is_pair_constructible < _U1 , _U2 > ( ) && __is_implicit < _U1 , _U2 > ( ) ; } } ; template < bool _MaybeEnable > using _CheckArgsDep __attribute__ ( ( __nodebug__ ) ) = typename conditional < _MaybeEnable , _CheckArgs , __check_tuple_constructor_fail > :: type ; struct _CheckTupleLikeConstructor { template < class _Tuple > static constexpr bool __enable_implicit ( ) { return __tuple_convertible < _Tuple , pair > :: value ; } template < class _Tuple > static constexpr bool __enable_explicit ( ) { return __tuple_constructible < _Tuple , pair > :: value && ! __tuple_convertible < _Tuple , pair > :: value ; } template < class _Tuple > static constexpr bool __enable_assign ( ) { return __tuple_assignable < _Tuple , pair > :: value ; } } ; template < class _Tuple > using _CheckTLC __attribute__ ( ( __nodebug__ ) ) = __conditional_t < __tuple_like_with_size < _Tuple , 2 > :: value && ! is_same < typename decay < _Tuple > :: type , pair > :: value , _CheckTupleLikeConstructor , __check_tuple_constructor_fail > ; template < bool _Dummy = true , typename enable_if < _CheckArgsDep < _Dummy > :: __enable_explicit_default ( ) > :: type * = nullptr > explicit __attribute__ ( ( __visibility__ ( \"hidden\" ) ) ) __attribute__ ( ( __exclude_from_explicit_instantiation__ ) ) __attribute__ ( ( __abi_tag__ ( \"v160006\" ) ) ) constexpr pair ( ) noexcept ( is_nothrow_default_constructible < first_type > :: value && is_nothrow_default_constructible < second_type > :: value ) : first ( ) , second ( ) { } template < bool _Dummy = true , typename enable_if < _CheckArgsDep < _Dummy > :: __enable_implicit_default ( ) > :: type * = nullptr > __attribute__ ( ( __visibility__ ( \"hidden\" ) ) ) __attribute__ ( ( __exclude_from_explicit_instantiation__ ) ) __attribute__ ( ( __abi_tag__ ( \"v160006\" ) ) ) constexpr pair ( ) noexcept ( is_nothrow_default_constructible < first_type > :: value && is_nothrow_default_constructible < second_type > :: value ) : first ( ) , second ( ) { } template < bool _Dummy = true , typename enable_if < _CheckArgsDep < _Dummy > :: template __enable_explicit < _T1 const & , _T2 const & > ( ) > :: type * = nullptr > __attribute__ ( ( __visibility__ ( \"hidden\" ) ) ) __attribute__ ( ( __exclude_from_explicit_instantiation__ ) ) __attribute__ ( ( __abi_tag__ ( \"v160006\" ) ) ) constexpr explicit pair ( _T1 const & __t1 , _T2 const & __t2 ) noexcept ( is_nothrow_copy_constructible < first_type > :: value && is_nothrow_copy_constructible < second_type > :: value ) : first ( __t1 ) , second ( __t2 ) { } template < bool _Dummy = true , typename enable_if < _CheckArgsDep < _Dummy > :: template __enable_implicit < _T1 const & , _T2 const & > ( ) > :: type * = nullptr > __attribute__ ( ( __visibility__ ( \"hidden\" ) ) ) __attribute__ ( ( __exclude_from_explicit_instantiation__ ) ) __attribute__ ( ( __abi_tag__ ( \"v160006\" ) ) ) constexpr pair ( _T1 const & __t1 , _T2 const & __t2 ) noexcept ( is_nothrow_copy_constructible < first_type > :: value && is_nothrow_copy_constructible < second_type > :: value ) : first ( __t1 ) , second ( __t2 ) { } template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_explicit < _U1 , _U2 > ( ) > :: type * = nullptr > __attribute__ ( ( __visibility__ ( \"hidden\" ) ) ) __attribute__ ( ( __exclude_from_explicit_instantiation__ ) ) __attribute__ ( ( __abi_tag__ ( \"v160006\" ) ) ) constexpr explicit pair ( _U1 && __u1 , _U2 && __u2 ) noexcept ( ( is_nothrow_constructible < first_type , _U1 > :: value && is_nothrow_constructible < second_type , _U2 > :: value ) ) : first ( std :: forward < _U1 > ( __u1 ) ) , second ( std :: forward < _U2 > ( __u2 ) ) { } template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_implicit < _U1 , _U2 > ( ) > :: type * = nullptr > __attribute__ ( ( __visibility__ ( \"hidden\" ) ) ) __attribute__ ( ( __exclude_from_explicit_instantiation__ ) ) __attribute__ ( ( __abi_tag__ ( \"v160006\" ) ) ) constexpr pair ( _U1 && __u1 , _U2 && __u2 ) noexcept ( ( is_nothrow_constructible < first_type , _U1 > :: value && is_nothrow_constructible < second_type , _U2 > :: value ) ) : first ( std :: forward < _U1 > ( __u1 ) ) , second ( std :: forward < _U2 > ( __u2 ) ) { } template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_explicit < _U1 const & , _U2 const & > ( ) > :: type * = nullptr > __attribute__ ( ( __visibility__ ( \"hidden\" ) ) ) __attribute__ ( ( __exclude_from_explicit_instantiation__ ) ) __attribute__ ( ( __abi_tag__ ( \"v160006\" ) ) ) constexpr explicit pair ( pair < _U1 , _U2 > const & __p ) noexcept ( ( is_nothrow_constructible < first_type , _U1 const & > :: value && is_nothrow_constructible < second_type , _U2 const & > :: value ) ) : first ( __p . first ) , second ( __p . second ) { } template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_implicit < _U1 const & , _U2 const & > ( ) > :: type * = nullptr > __attribute__ ( ( __visibility__ ( \"hidden\" ) ) ) __attribute__ ( ( __exclude_from_explicit_instantiation__ ) ) __attribute__ ( ( __abi_tag__ ( \"v160006\" ) ) ) constexpr pair ( pair < _U1 , _U2 > const & __p ) noexcept ( ( is_nothrow_constructible < first_type , _U1 const & > :: value && is_nothrow_constructible < second_type , _U2 const & > :: value ) ) : first ( __p . first ) , second ( __p . second ) { } template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_explicit < _U1 , _U2 > ( ) > :: type * = nullptr > __attribute__ ( ( __visibility__ ( \"hidden\" ) ) ) __attribute__ ( ( __exclude_from_explicit_instantiation__ ) ) __attribute__ ( ( __abi_tag__ ( \"v160006\" ) ) ) constexpr explicit pair ( pair < _U1 , _U2 > && __p ) noexcept ( ( is_nothrow_constructible < first_type , _U1 && > :: value && is_nothrow_constructible < second_type , _U2 && > :: value ) ) : first ( std :: forward < _U1 > ( __p . first ) ) , second ( std :: forward < _U2 > ( __p . second ) ) { } template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_implicit < _U1 , _U2 > ( ) > :: type * = nullptr > __attribute__ ( ( __visibility__ ( \"hidden\" ) ) ) __attribute__ ( ( __exclude_from_explicit_instantiation__ ) ) __attribute__ ( ( __abi_tag__ ( \"v160006\" ) ) ) constexpr pair ( pair < _U1 , _U2 > && __p ) noexcept ( ( is_nothrow_constructible < first_type , _U1 && > :: value && is_nothrow_constructible < second_type , _U2 && > :: value ) ) : first ( std :: forward < _U1 > ( __p . first ) ) , second ( std :: forward < _U2 > ( __p . second ) ) { } template < class _Tuple , typename enable_if < _CheckTLC < _Tuple > :: template __enable_explicit < _Tuple > ( ) > :: type * = nullptr > __attribute__ ( ( __visibility__ ( \"hidden\" ) ) ) __attribute__ ( ( __exclude_from_explicit_instantiation__ ) ) __attribute__ ( ( __abi_tag__ ( \"v160006\" ) ) ) constexpr explicit pair ( _Tuple && __p ) : first ( std :: get < 0 > ( std :: forward < _Tuple > ( __p ) ) ) , second ( std :: get < 1 > ( std :: forward < _Tuple > ( __p ) ) ) { } template < class _Tuple , typename enable_if < _CheckTLC < _Tuple > :: template __enable_implicit < _Tuple > ( ) > :: type * = nullptr > __attribute__ ( ( __visibility__ ( \"hidden\" ) ) ) __attribute__ ( ( __exclude_from_explicit_instantiation__ ) ) __attribute__ ( ( __abi_tag__ ( \"v160006\" ) ) ) constexpr pair ( _Tuple && __p ) : first ( std :: get < 0 > ( std :: forward < _Tuple > ( __p ) ) ) , second ( std :: get < 1 > ( std :: forward < _Tuple > ( __p ) ) ) { } template < class ... _Args1 , class ... _Args2 > __attribute__ ( ( __visibility__ ( \"hidden\" ) ) ) __attribute__ ( ( __exclude_from_explicit_instantiation__ ) ) __attribute__ ( ( __abi_tag__ ( \"v160006\" ) ) ) pair ( piecewise_construct_t __pc , tuple < _Args1 ... > __first_args , tuple < _Args2 ... > __second_args ) noexcept ( ( is_nothrow_constructible < first_type , _Args1 ... > :: value && is_nothrow_constructible < second_type , _Args2 ... > :: value ) ) : pair ( __pc , __first_args , __second_args , typename __make_tuple_indices < sizeof ... ( _Args1 ) > :: type ( ) , typename __make_tuple_indices < sizeof ... ( _Args2 ) > :: type ( ) ) { } __attribute__ ( ( __visibility__ ( \"hidden\" ) ) ) __attribute__ ( ( __exclude_from_explicit_instantiation__ ) ) __attribute__ ( ( __abi_tag__ ( \"v160006\" ) ) ) pair & operator = ( __conditional_t < is_copy_assignable < first_type > :: value && is_copy_assignable < second_type > :: value , pair , __nat > const & __p ) noexcept ( is_nothrow_copy_assignable < first_type > :: value && is_nothrow_copy_assignable < second_type > :: value ) { first = __p . first ; second = __p . second ; return * this ; } __attribute__ ( ( __visibil"... 

Printed tokens:

(std::string) $12 = "template < > struct pair < const char * , char * > { typedef class _T1 first_type ; typedef class _T2 second_type ; class _T1 first ; class _T2 second ; pair ( const pair < const char * char * > & ) = default ; pair ( pair < const char * char * > && ) = default ; struct _CheckArgs { template < int & ... > static constexpr bool __enable_explicit_default ( ) ; ; template < int & ... > static constexpr bool __enable_implicit_default ( ) ; ; template < class _U1 , class _U2 > static constexpr bool __is_pair_constructible ( ) ; ; template < class _U1 , class _U2 > static constexpr bool __is_implicit ( ) ; ; template < class _U1 , class _U2 > static constexpr bool __enable_explicit ( ) ; ; template < class _U1 , class _U2 > static constexpr bool __enable_implicit ( ) ; ; } ; template < bool _MaybeEnable > using _CheckArgsDep __attribute__ ( ( nodebug ) ) = typename conditional < _MaybeEnable _CheckArgs , __check_tuple_constructor_fail > :: type ; struct _CheckTupleLikeConstructor ; template < class _Tuple > using _CheckTLC __attribute__ ( ( nodebug ) ) = __conditional_t < __tuple_like_with_size < _Tuple , 2 > :: value && ! is_same < typename decay < _Tuple > :: type , pair < const char * , char * >> :: value _CheckTupleLikeConstructor , __check_tuple_constructor_fail > ; template < bool _Dummy = true , typename enable_if < _CheckArgsDep < _Dummy > :: __enable_explicit_default ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr explicit pair ( ) ; ; template < bool _Dummy = true , typename enable_if < _CheckArgsDep < _Dummy > :: __enable_implicit_default ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr pair ( ) ; ; template < bool _Dummy = true , typename enable_if < _CheckArgsDep < _Dummy > :: template __enable_explicit < class _T1 const & class _T2 const & > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr explicit pair ( class _T1 const & __t1 , class _T2 const & __t2 ) ; ; template < bool _Dummy = true , typename enable_if < _CheckArgsDep < _Dummy > :: template __enable_implicit < class _T1 const & class _T2 const & > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr pair ( class _T1 const & __t1 , class _T2 const & __t2 ) ; ; template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_explicit < _U1 , _U2 > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr explicit pair ( _U1 && __u1 , _U2 && __u2 ) ; ; template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_implicit < _U1 , _U2 > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr pair ( _U1 && __u1 , _U2 && __u2 ) ; ; template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_explicit < const _U1 & const _U2 & > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr explicit pair ( const pair < _U1 , _U2 > & __p ) ; ; template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_implicit < const _U1 & const _U2 & > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr pair ( const pair < _U1 , _U2 > & __p ) ; ; template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_explicit < _U1 , _U2 > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr explicit pair ( pair < _U1 , _U2 > && __p ) ; ; template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_implicit < _U1 , _U2 > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr pair ( pair < _U1 , _U2 > && __p ) ; ; template < class _Tuple , typename enable_if < _CheckTLC < _Tuple > :: template __enable_explicit < _Tuple > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr explicit pair ( _Tuple && __p ) ; ; template < class _Tuple , typename enable_if < _CheckTLC < _Tuple > :: template __enable_implicit < _Tuple > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr pair ( _Tuple && __p ) ; ; template < class ... _Args1 , class ... _Args2 > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) pair ( piecewise_construct_t __pc , tuple < _Args1 ... > __first_args , tuple < _Args2 ... > __second_args ) ; ; pair < const char * char * > & operator = ( const __conditional_t < is_copy_assignable < first_type > :: value && is_copy_assignable < second_type > :: value pair < const char * char * > , __nat > & __p ) __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) ; pair < const char * char * > & operator = ( __conditional_t < is_move_assignable < first_type > :: value && is_move_assignable < second_type > :: value pair < const char * char * > , __nat > && __p ) __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) ; template < class _Tuple , typename enable_if < _CheckTLC < _Tuple > :: template __enable_assign < _Tuple > ( ) > :: type * = nullptr > pair < const char * char * > & operator = ( _Tuple && __p ) __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) ; ; void swap ( pair < const char * char * > & __p ) __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) ; private : template < class ... _Args1 , class ... _Args2 , size_t ... _I1 , size_t ... _I2 > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) pair ( piecewise_construct_t , tuple < _Args1 ... > & __first_args , tuple < _Args2 ... > & __second_args , __tuple_indices < _I1 ... > , __tuple_indices < _I2 ... > ) ; ; } ; template < > struct pair < const wchar_t * , wchar_t * > { typedef class _T1 first_type ; typedef class _T2 second_type ; class _T1 first ; class _T2 second ; pair ( const pair < const wchar_t * wchar_t * > & ) = default ; pair ( pair < const wchar_t * wchar_t * > && ) = default ; struct _CheckArgs { template < int & ... > static constexpr bool __enable_explicit_default ( ) ; ; template < int & ... > static constexpr bool __enable_implicit_default ( ) ; ; template < class _U1 , class _U2 > static constexpr bool __is_pair_constructible ( ) ; ; template < class _U1 , class _U2 > static constexpr bool __is_implicit ( ) ; ; template < class _U1 , class _U2 > static constexpr bool __enable_explicit ( ) ; ; template < class _U1 , class _U2 > static constexpr bool __enable_implicit ( ) ; ; } ; template < bool _MaybeEnable > using _CheckArgsDep __attribute__ ( ( nodebug ) ) = typename conditional < _MaybeEnable _CheckArgs , __check_tuple_constructor_fail > :: type ; struct _CheckTupleLikeConstructor ; template < class _Tuple > using _CheckTLC __attribute__ ( ( nodebug ) ) = __conditional_t < __tuple_like_with_size < _Tuple , 2 > :: value && ! is_same < typename decay < _Tuple > :: type , pair < const wchar_t * , wchar_t * >> :: value _CheckTupleLikeConstructor , __check_tuple_constructor_fail > ; template < bool _Dummy = true , typename enable_if < _CheckArgsDep < _Dummy > :: __enable_explicit_default ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr explicit pair ( ) ; ; template < bool _Dummy = true , typename enable_if < _CheckArgsDep < _Dummy > :: __enable_implicit_default ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr pair ( ) ; ; template < bool _Dummy = true , typename enable_if < _CheckArgsDep < _Dummy > :: template __enable_explicit < class _T1 const & class _T2 const & > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr explicit pair ( class _T1 const & __t1 , class _T2 const & __t2 ) ; ; template < bool _Dummy = true , typename enable_if < _CheckArgsDep < _Dummy > :: template __enable_implicit < class _T1 const & class _T2 const & > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr pair ( class _T1 const & __t1 , class _T2 const & __t2 ) ; ; template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_explicit < _U1 , _U2 > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr explicit pair ( _U1 && __u1 , _U2 && __u2 ) ; ; template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_implicit < _U1 , _U2 > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr pair ( _U1 && __u1 , _U2 && __u2 ) ; ; template < class _U1 , class _U2 , typename enable_if < _CheckArgs :: template __enable_explicit < const _U1 & const _U2 & > ( ) > :: type * = nullptr > __attribute__ ( ( exclude_from_explicit_instantiation ) ) __attribute__ ( ( abi_tag ( \"v160006\" ) ) ) constexpr explicit p"...

kumarak avatar Dec 07 '23 18:12 kumarak