brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 95bfcf6 Raw
55 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// Can you have a catch clause of array type that catches anything?10 11// UNSUPPORTED: no-exceptions12 13// GCC incorrectly allows function pointer to be caught by reference.14// See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=6937215// XFAIL: gcc16 17#include <cassert>18 19template <class Tp>20bool can_convert(Tp) { return true; }21 22template <class>23bool can_convert(...) { return false; }24 25void f() {}26 27int main(int, char**)28{29    typedef void Function();30    assert(!can_convert<Function&>(&f));31    assert(!can_convert<void*>(&f));32    try33    {34        throw f;     // converts to void (*)()35        assert(false);36    }37    catch (Function& b)  // can't catch void (*)()38    {39        assert(false);40    }41    catch (void*) // can't catch as void*42    {43        assert(false);44    }45    catch(Function*)46    {47    }48    catch (...)49    {50        assert(false);51    }52 53    return 0;54}55