www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Empty UDA for classes not allowed?

reply bauss <jj_1337 live.dk> writes:
Why is it not allowed to have empty UDAs for classes?

Let's say we have an UDA like this:
struct Exclude { }

Then we want to put it on a class like:

 Exclude class Foo
{
     ...
}

This will fail with the following error:
Error: type Exclude has no value

But on everything else we can place an empty UDA like that ex. on 
a function:

This is okay:

 Exclude void foo()
{
     ...
}

Can someone explain to me why it's not possible with classes?
Oct 26
next sibling parent reply Jonathan M Davis <newsgroup.d jmdavisprog.com> writes:
On Thursday, October 26, 2017 15:09:48 bauss via Digitalmars-d-learn wrote:
 Why is it not allowed to have empty UDAs for classes?

 Let's say we have an UDA like this:
 struct Exclude { }

 Then we want to put it on a class like:

  Exclude class Foo
 {
      ...
 }

 This will fail with the following error:
 Error: type Exclude has no value

 But on everything else we can place an empty UDA like that ex. on
 a function:

 This is okay:

  Exclude void foo()
 {
      ...
 }

 Can someone explain to me why it's not possible with classes?
It worked just fine when I just tried it on my machine - both with dmd master and with 2.076.1. Are you using an older version of the compiler than 2.076.1? It's possible that there was a bug that was fixed. - Jonathan M Davis
Oct 26
parent bauss <jj_1337 live.dk> writes:
On Thursday, 26 October 2017 at 21:24:43 UTC, Jonathan M Davis 
wrote:
 On Thursday, October 26, 2017 15:09:48 bauss via 
 Digitalmars-d-learn wrote:
 [...]
It worked just fine when I just tried it on my machine - both with dmd master and with 2.076.1. Are you using an older version of the compiler than 2.076.1? It's possible that there was a bug that was fixed. - Jonathan M Davis
Yeah I can't reproduce it right now, so I'm not even sure.
Oct 26
prev sibling parent Nicholas Wilson <iamthewilsonator hotmail.com> writes:
On Thursday, 26 October 2017 at 15:09:48 UTC, bauss wrote:
 Why is it not allowed to have empty UDAs for classes?

 Let's say we have an UDA like this:
 struct Exclude { }

 Then we want to put it on a class like:

  Exclude class Foo
 {
     ...
 }

 This will fail with the following error:
 Error: type Exclude has no value

 But on everything else we can place an empty UDA like that ex. 
 on a function:

 This is okay:

  Exclude void foo()
 {
     ...
 }

 Can someone explain to me why it's not possible with classes?
FWIW all parameterless UDA in LDC use a struct literal e.g. https://github.com/ldc-developers/druntime/blob/ldc/src/ldc/attributes.d#L237
Oct 26