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