#include <utility>
namespace util {
template < typename t >
t traits_type_entry( t const & ) ; // Declared, never defined.
template < typename t >
using traits_type = decltype( traits_type_entry( std:: declval < t > ( ) ) ) ;
}
class outer_scope { // Just for illustration
struct special;
struct special_traits {
typedef int value_type;
constexpr static int limit = 5 ;
} ;
friend special_traits traits_type_entry( special const & ) ;
struct unspecial {
typedef double baz_type;
int table[ util:: traits_type < special > :: limit ] ;
} ;
struct special : special_traits {
void f( ) {
std:: pair < typename util:: traits_type < unspecial > :: baz_type , value_type > ( ) ;
}
} ;
} ;
I2luY2x1ZGUgPHV0aWxpdHk+CgpuYW1lc3BhY2UgdXRpbCB7CnRlbXBsYXRlPCB0eXBlbmFtZSB0ID4KdCB0cmFpdHNfdHlwZV9lbnRyeSggdCBjb25zdCAmICk7IC8vIERlY2xhcmVkLCBuZXZlciBkZWZpbmVkLgoKdGVtcGxhdGU8IHR5cGVuYW1lIHQgPgp1c2luZyB0cmFpdHNfdHlwZSA9IGRlY2x0eXBlKCB0cmFpdHNfdHlwZV9lbnRyeSggc3RkOjpkZWNsdmFsPCB0ID4oKSApICk7Cn0KCmNsYXNzIG91dGVyX3Njb3BlIHsgLy8gSnVzdCBmb3IgaWxsdXN0cmF0aW9uCiAgICBzdHJ1Y3Qgc3BlY2lhbDsKICAgIHN0cnVjdCBzcGVjaWFsX3RyYWl0cyB7CiAgICAgICAgdHlwZWRlZiBpbnQgdmFsdWVfdHlwZTsKICAgICAgICBjb25zdGV4cHIgc3RhdGljIGludCBsaW1pdCA9IDU7CiAgICB9OwogICAgZnJpZW5kIHNwZWNpYWxfdHJhaXRzIHRyYWl0c190eXBlX2VudHJ5KCBzcGVjaWFsIGNvbnN0ICYgKTsKCiAgICBzdHJ1Y3QgdW5zcGVjaWFsIHsKICAgICAgICB0eXBlZGVmIGRvdWJsZSBiYXpfdHlwZTsKICAgICAgICBpbnQgdGFibGVbIHV0aWw6OnRyYWl0c190eXBlPCBzcGVjaWFsID46OmxpbWl0IF07CiAgICB9OwoKICAgIHN0cnVjdCBzcGVjaWFsIDogc3BlY2lhbF90cmFpdHMgewogICAgICAgIHZvaWQgZigpIHsKICAgICAgICAgICAgIHN0ZDo6cGFpcjwgdHlwZW5hbWUgdXRpbDo6dHJhaXRzX3R5cGU8IHVuc3BlY2lhbCA+OjpiYXpfdHlwZSwgdmFsdWVfdHlwZSA+KCk7CiAgICAgICAgfQogICAgfTsKfTsK