bug-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Bison 3.1 api.value.type {semantic_type} error in gcc8


From: Hans Åberg
Subject: Re: Bison 3.1 api.value.type {semantic_type} error in gcc8
Date: Tue, 16 Oct 2018 14:57:47 +0200

> On 16 Oct 2018, at 13:19, Akim Demaille <address@hidden> wrote:
> 
>> Le 16 oct. 2018 à 11:20, Hans Åberg <address@hidden> a écrit :
>> 
>> In Bison 3.1,
>> %define api.value.type {semantic_type}
> 
> Actually, what are you trying to achieve?  semantic_type is the name
> of the typedef used by bison.  So, of course, it’s quite a bad idea
> to use that name.  Unless you do mean to use that name, but not
> Bison’s, rather some other definition, coming from some other place,
> in which case you must provide the namespace/path to it.

The minimal example below compiles with clang++6, but not with g++8. One would 
think that it should define a qualified name B::A, used as
  mu::B::A a;
as in the other cases below. But I have it probably by legacy since when Bison 
used YYSTYPE only, though.

A draft version of the C++ standard says:

7.1.3 The typedef specifier [dcl.typedef]
4. In a given class scope, a typedef specifier can be used to redefine any 
class-name declared in that scope
that is not also a typedef-name to refer to the type to which it already 
refers. [Example:
  struct S {
    typedef struct A { } A; // OK
    typedef struct B B;     // OK
    typedef A A;            // error

};
— end example]

So in the example below, g++8 accepts:
  typedef class A A;
  typedef mu::A A;

--
namespace mu {
  class A {};

  class B {
  public:
    typedef A A;
  };
}

int main () {
  mu::B::A a;

  return 0;
}
--




reply via email to

[Prev in Thread] Current Thread [Next in Thread]