1// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 2// expected-no-diagnostics 3 4// PR10087: Make sure that we don't conflate exception specifications 5// from different functions in the canonical type system. 6namespace std 7{ 8 9template <class _Tp> _Tp&& declval() noexcept; 10 11template <class _Tp, class... _Args> 12struct _is_nothrow_constructible 13{ 14 static const bool value = noexcept(_Tp(declval<_Args>()...)); 15}; 16 17template<class, class _Traits, class _Allocator> 18class basic_string 19{ 20public: 21 typedef typename _Traits::char_type value_type; 22 typedef _Allocator allocator_type; 23 24 basic_string() 25 noexcept(_is_nothrow_constructible<allocator_type>::value); 26}; 27 28template <class, class, class _Compare> 29struct __map_value_compare 30{ 31public: 32 __map_value_compare() 33 noexcept(_is_nothrow_constructible<_Compare>::value); 34}; 35 36struct less 37{ 38}; 39 40struct map 41{ 42 typedef __map_value_compare<int, short, less> __vc; 43 __vc vc_; 44}; 45 46 47template<class T, class _Traits, class _Allocator> 48basic_string<T, _Traits, _Allocator>::basic_string() noexcept(_is_nothrow_constructible<allocator_type>::value) {} 49 50template <class T, class Value, class _Compare> 51__map_value_compare<T, Value, _Compare>::__map_value_compare() 52 noexcept(_is_nothrow_constructible<_Compare>::value) {} 53 54} // std 55