Home | History | Annotate | Download | only in array.zero
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // UNSUPPORTED: libcpp-no-exceptions
     11 // MODULES_DEFINES: _LIBCPP_DEBUG=1
     12 // MODULES_DEFINES: _LIBCPP_DEBUG_USE_EXCEPTIONS
     13 
     14 // Can't test the system lib because this test enables debug mode
     15 // UNSUPPORTED: with_system_cxx_lib
     16 
     17 // test array<T, 0>::front() throws a debug exception.
     18 
     19 #define _LIBCPP_DEBUG 1
     20 #define _LIBCPP_DEBUG_USE_EXCEPTIONS
     21 #include <array>
     22 
     23 template <class Array>
     24 inline bool CheckDebugThrows(Array& Arr) {
     25   try {
     26     Arr.front();
     27   } catch (std::__libcpp_debug_exception const&) {
     28     return true;
     29   }
     30   return false;
     31 }
     32 
     33 int main()
     34 {
     35   {
     36     typedef std::array<int, 0> C;
     37     C c = {};
     38     C const& cc = c;
     39     assert(CheckDebugThrows(c));
     40     assert(CheckDebugThrows(cc));
     41   }
     42   {
     43     typedef std::array<const int, 0> C;
     44     C c = {{}};
     45     C const& cc = c;
     46     assert(CheckDebugThrows(c));
     47     assert(CheckDebugThrows(cc));
     48   }
     49 }
     50