/*
https://issues.dlang.org/show_bug.cgi?id=8511
TEST_OUTPUT:
---
fail_compilation/enum_init.d(5): Error: type `SQRTMAX` has no value
---
*/
#line 1
real hypot()
{
    enum SQRTMAX;
    SQRTMAX/2;
}
/*
https://issues.dlang.org/show_bug.cgi?id=21785
TEST_OUTPUT:
---
fail_compilation/enum_init.d(106): Error: enum `enum_init.NoBase` is opaque and has no default initializer
---
*/
#line 100
enum NoBase;
void fooNB()
{
	NoBase nbv = void;
	NoBase nb;
}
/*
https://issues.dlang.org/show_bug.cgi?id=21785
TEST_OUTPUT:
---
fail_compilation/enum_init.d(206): Error: enum `enum_init.Xobj` is opaque and has no default initializer
---
*/
#line 200
enum Xobj : void*;
void main()
{
	Xobj vv = void;
	Xobj var;
}
/*
https://issues.dlang.org/show_bug.cgi?id=21785
TEST_OUTPUT:
---
fail_compilation/enum_init.d(306): Error: variable `enum_init.fooOB.ob` - no definition of struct `S`
fail_compilation/enum_init.d(302):        required by type `OpaqueBase`
---
*/
#line 300
struct S;
enum OpaqueBase : S;
void fooOB()
{
	OpaqueBase ob;
}
/*
TEST_OUTPUT:
---
fail_compilation/enum_init.d(405): Error: enum `enum_init.forwardRef.Foo` forward reference of `Foo.init`
---
*/
#line 400
void forwardRef()
{
    enum Foo
    {
        a = Foo.init
    }
}
/*
https://issues.dlang.org/show_bug.cgi?id=21792
TEST_OUTPUT:
---
fail_compilation/enum_init.d(503): Error: circular reference to enum base type `Bar`
---
*/
#line 500
void forwardRef2()
{
    enum Bar : Bar
    {
        a
    }
}
/*
TEST_OUTPUT:
---
fail_compilation/enum_init.d(606): Error: enum member `enum_init.forwardRef3.Foo.b` is forward referenced looking for `.min`
fail_compilation/enum_init.d(607): Error: enum member `enum_init.forwardRef3.Foo.c` is forward referenced looking for `.min`
---
*/
#line 600
void forwardRef3()
{
    enum Foo
    {
        a,
        b = Foo.min,
        c
    }
}
/*
TEST_OUTPUT:
---
fail_compilation/enum_init.d(711): Error: circular reference to enum base type `int[Bar.sizeof]`
---
*/
#line 700
void forwardRef4()
{
    enum Foo
    {
        a = Foo.sizeof,
        c
    }
    // pragma(msg, typeof(Foo.sizeof));
    // static assert(is(Foo Base == enum) && is(Base == int));
    enum Bar : int[Bar.sizeof]
    {
        a
    }
}
/*
TEST_OUTPUT:
---
fail_compilation/enum_init.d(809): Error: enum `enum_init.opaqueProperties.Foo` is opaque and has no default initializer
fail_compilation/enum_init.d(810): Error: enum `enum_init.opaqueProperties.Foo` is opaque and has no `.min`
fail_compilation/enum_init.d(811): Error: enum `enum_init.opaqueProperties.Foo` is opaque and has no `.max`
---
*/
#line 800
void opaqueProperties()
{
    enum Foo;
    // Valid
    enum size = Foo.sizeof;
    enum s = Foo.mangleof;
    Foo f = Foo.init;
    int min = Foo.min;
    int max = Foo.max;
}