1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 21abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor 31abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor// PR10087: Make sure that we don't conflate exception specifications 41abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor// from different functions in the canonical type system. 51abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregornamespace std 61abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor{ 71abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor 81abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregortemplate <class _Tp> _Tp&& declval() noexcept; 91abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor 101abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregortemplate <class _Tp, class... _Args> 111abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregorstruct __is_nothrow_constructible 121abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor{ 131abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor static const bool value = noexcept(_Tp(declval<_Args>()...)); 141abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor}; 151abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor 161abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregortemplate<class, class _Traits, class _Allocator> 171abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregorclass basic_string 181abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor{ 191abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregorpublic: 201abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor typedef typename _Traits::char_type value_type; 211abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor typedef _Allocator allocator_type; 221abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor 231abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor basic_string() 241abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor noexcept(__is_nothrow_constructible<allocator_type>::value); 251abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor}; 261abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor 271abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregortemplate <class, class, class _Compare> 281abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregorstruct __map_value_compare 291abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor{ 301abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregorpublic: 311abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor __map_value_compare() 321abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor noexcept(__is_nothrow_constructible<_Compare>::value); 331abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor}; 341abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor 351abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregorstruct less 361abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor{ 371abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor}; 381abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor 391abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregorstruct map 401abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor{ 411abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor typedef __map_value_compare<int, short, less> __vc; 421abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor __vc vc_; 431abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor}; 441abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor 451abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor 461abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregortemplate<class T, class _Traits, class _Allocator> 471abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregorbasic_string<T, _Traits, _Allocator>::basic_string() noexcept(__is_nothrow_constructible<allocator_type>::value) {} 481abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor 491abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregortemplate <class T, class Value, class _Compare> 501abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor__map_value_compare<T, Value, _Compare>::__map_value_compare() 511abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor noexcept(__is_nothrow_constructible<_Compare>::value) {} 521abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor 531abd35950bcb0761887dca0995c68b8a9dc8916fDouglas Gregor} // std 54