Hi! > Le 22 oct. 2018 à 09:48, 長田偉伸 <cbh34...@iret.co.jp> a écrit : > > [Description] > Please confirm the attached file > > [Cause location] > $base = std::static_pointer_cast<decltype($base)::element_type>($sub); > > [Error Message] > $ bison parser.yy; clang++-6.0 -std=c++17 -Wall -Wextra -g -O0 parser.cc > parser.yy:87:79: error: > 'decltype(yylhs.value.as<std::shared_ptr<Baseclass> >())' (aka > 'std::shared_ptr<Baseclass> &') > is not a class, namespace, or enumeration > yylhs.value.as< std::shared_ptr<Baseclass> > > () = std::static_pointer_cast<decltype(yylh…
Your file: > rule1[base] > : rule2[sub] > { > // > // * Upcast from [Subclass] to [Baseclass] > // > > // 1) OK > //$base = $sub; > > // 2) OK > //$base = std::static_pointer_cast<Baseclass>($sub); > > // 3) OK > //auto base{ $base }; > //$base = > std::static_pointer_cast<decltype(base)::element_type>($sub); > > // 4) NG > $base = > std::static_pointer_cast<decltype($base)::element_type>($sub); > } > ; Wow… Why are you looking for something so complex? What is wrong with 1? You need to get rid of the reference. That’s what « ’std::shared_ptr<Baseclass> &’ is not a class, namespace, or enumeration » is telling you: $base = std::static_pointer_cast<std::remove_reference_t<decltype($base)>::element_type>($sub); Cheers!