Squashed 'third_party/GSL/' content from commit 0cebbd7

Change-Id: Iffb2e32f2f45297ac6d3e82168cd9df4ac5acc2f
git-subtree-dir: third_party/GSL
git-subtree-split: 0cebbd77bfc21acbf1cc05983ad626539eeeb8e0
diff --git a/tests/no_exception_ensure_tests.cpp b/tests/no_exception_ensure_tests.cpp
new file mode 100644
index 0000000..5da021e
--- /dev/null
+++ b/tests/no_exception_ensure_tests.cpp
@@ -0,0 +1,53 @@
+///////////////////////////////////////////////////////////////////////////////

+//

+// Copyright (c) 2015 Microsoft Corporation. All rights reserved.

+//

+// This code is licensed under the MIT License (MIT).

+//

+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN

+// THE SOFTWARE.

+//

+///////////////////////////////////////////////////////////////////////////////

+

+#include <cstdlib>      // for std::exit

+#include <gsl/span>     // for span

+

+int operator_subscript_no_throw()

+{

+    int arr[10]; 

+    gsl::span<int> sp { arr };

+    return sp[11];

+}

+

+

+void test_terminate()

+{ 

+    std::exit(0);

+}

+

+void setup_termination_handler()

+{

+#if defined(_MSC_VER)

+

+    auto& handler = gsl::details::get_terminate_handler();

+    handler = &test_terminate;

+

+#else

+

+    std::set_terminate(test_terminate);

+

+#endif

+}

+

+

+int main()

+{

+    setup_termination_handler();

+    operator_subscript_no_throw();

+    return -1;

+}