55 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s2// expected-no-diagnostics3 4// PR10087: Make sure that we don't conflate exception specifications5// from different functions in the canonical type system.6namespace std7{8 9template <class _Tp> _Tp&& declval() noexcept;10 11template <class _Tp, class... _Args>12struct _is_nothrow_constructible13{14 static const bool value = noexcept(_Tp(declval<_Args>()...));15};16 17template<class, class _Traits, class _Allocator>18class basic_string19{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_compare30{31public:32 __map_value_compare()33 noexcept(_is_nothrow_constructible<_Compare>::value);34};35 36struct less37{38};39 40struct map41{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} // std55