abstract1.c
来自「xml大全 可读写调用率很高 xml大全 可读写调用率很高」· C语言 代码 · 共 60 行
C
60 行
// { dg-do compile }// Contributed by <giovannibajo at gcc dot gnu dot org>,// <pavel_vozenilek at hotmail dot com>,// <bangerth at dealii dot org>// c++/9256: Make sure that a pointer to an array of abstract elements// cannot be created, not even during template substitution (DR337).struct Abstract { virtual void f() = 0; }; // { dg-error "" } struct Complete { void f(); };/* * TEST 1 * Arrays of abstract elements cannot be declared. */Abstract a0[2]; // { dg-error "" }Abstract (*a1)[2]; // { dg-error "" }Abstract (**a2)[2]; // { dg-error "" }Abstract (***a3)[2]; // { dg-error "" }Abstract *a4;Abstract *a5[2];Abstract (*a6[2])[2]; // { dg-error "" }Abstract **a7[2];Abstract *(*a8[2])[2]; Abstract (**a9[2])[2]; // { dg-error "" }/* * TEST 2 * If a pointer to an array of abstract elements is created during template * instantiation, an error should occur. */template <class T> struct K { T (*a)[2]; // { dg-error "abstract class type" }};template struct K<Abstract>; // { dg-error "from here" }/* * TEST 3 * Deducing an array of abstract elements during type deduction is a silent * failure (rejects overload). */template <bool> struct StaticAssert;template <> struct StaticAssert<true> {};typedef char Yes;typedef struct { char x[2]; } No;template<typename U> No is_abstract(U (*k)[1]);template<typename U> Yes is_abstract(...);StaticAssert<sizeof(is_abstract<Abstract>(0)) == sizeof(Yes)> b1;StaticAssert<sizeof(is_abstract<Complete>(0)) == sizeof(No)> b2;StaticAssert<sizeof(is_abstract<int>(0)) == sizeof(No)> b3;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?