[GCC-XML] Default parameter values in member functions of templated classes.

Thomas Menguy thomas.menguy at gmail.com
Mon Feb 25 03:34:32 EST 2008


Hi Bryan,

check the stl standared: http://www.sgi.com/tech/stl/basic_string.html



static const size_type npos 	basic_string 	The largest possible value
of type size_type. That is, size_type(-1).

=> npos is a constant defined by basic_string, and now look at the
default constructor:
basic_string(const basic_string& s, size_type pos = 0, size_type n = npos)


so yes, for me have default equal to this is normal.... look at npos
in your xml and you will see its definition.

Hope this helps
Thomas



On Mon, Feb 25, 2008 at 3:52 AM, Bryan Ischo <bji-gccxml at ischo.com> wrote:
> Brad King wrote:
>  > Nindi Singh wrote:
>  >> The default values look interesting. gccxml does pick up that there
>  >> is a default value
>  >> for the second parameter of the constructor in both the templated and
>  >> non-templated classes.
>  >> However  <gccxml-cast-expr> is something I do not understand,
>  >> should it not be the same as egclass() ?
>  >> I am actualy using pygccxml and that does not pick up the fact there
>  >> is actual a default value.
>  >
>  > You've encountered a work around for a previous bug.  Years ago I had
>  > to disable dumping of GCC's "CAST_EXPR" types in default values
>  > because GCC's expression-to-string conversion did not support it.  It
>  > looks like this work around is no longer needed since the update to
>  > the GCC 4.2 parser.  I've committed changes to remove the work around
>  > and restore the intended behavior:
>  >
>  > /cvsroot/GCC_XML/gccxml/GCC/gcc/cp/xml.c,v  <--  xml.c
>  > new revision: 1.120; previous revision: 1.119
>  >
>  > If you update from CVS it should now be fixed.
>  >
>  > Thanks for the detailed report.  That made it easy to find the problem.
>
>  I'm not sure if what I am seeing is this same issue, or related, or
>  maybe something different, or maybe isn't an issue at all and is just my
>  misunderstanding of the C++ syntax involved.
>
>  Here is a simple sample header file to run through gccxml:
>
>  #include <string>
>
>  class Foo
>  {
>  public:
>
>     std::string s;
>  };
>
>
>  Now when I use the latest gccxml on this header (I just checked gccxml
>  out today from CVS source), on a Fedora Core 5 system using GCC 4.1.1, I
>  get a very big resulting XML file that I won't post all of here; but I
>  will post this excerpt which is interesting:
>
>
>   <Constructor id="_1826" name="basic_string" explicit="1"
>  context="_1222" access="public"
>  mangled="_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jj *INTERNAL* "
>  demangled="std::basic_string<wchar_t,
>  std::char_traits<wchar_t>, std::allocator<wchar_t>
>  >::basic_string(std::basic_string<wchar_t,
>  std::char_traits<wchar_t>, std::allocator<wchar_t> >
>  const&, unsigned int, unsigned int)" location="f64:196" file="f64"
>  line="196" extern="1">
>     <Argument name="__str" type="_2694" location="f64:196" file="f64"
>  line="196"/>
>     <Argument name="__pos" type="_789" location="f64:196" file="f64"
>  line="196"/>
>     <Argument name="__n" type="_789" location="f64:196" file="f64"
>  line="196" default="std::basic_string<_CharT, _Traits,
>  _Alloc>::npos"/>
>   </Constructor>
>
>
>  This context of this constructor is:
>
>   <Struct id="_1222"
>  name="basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>
>  >" context="_2" mangled="SbIwSt11char_traitsIwESaIwEE"
>  demangled="std::basic_string<wchar_t,
>  std::char_traits<wchar_t>, std::allocator<wchar_t> >"
>  location="f47:56" file="f47" line="56" artificial="1" size="32"
>  align="32" members="<deleted for brevity>" bases=""/>
>
>  What I don't understand is, what the default value of the last argument
>  in the Constructor represents.  The text is:
>
>  default="std::basic_string<_CharT, _Traits, _Alloc>::npos"
>
>  Which, de-escaped, is:
>
>  std::basic_string<_CharT, _Traits, _Alloc>::npos
>
>  I don't understand what I am looking at.  This is part of a template
>  declaration, not a specific template instantiation; how is this valid
>  for the default value of a constructor argument for an instantiated
>  template?  It almost looks to me like in some cases (not all cases,
>  because I am pretty sure that there are many other template constructors
>  with default values for which this is working; the only one currently
>  causing me trouble is the one for std::basic_string), gccxml is not
>  replacing the template parameters with the parameterized values they
>  should be assigned from the template instantiation in question.
>
>  Any clues?  If no one has any ideas I can try the gccxml version before
>  the fix that Brad King mentioned above, and see what the difference is;
>  that may provide some useful info.
>
>  Thanks,
>  Bryan
>
>
>
>  _______________________________________________
>  gccxml mailing list
>  gccxml at gccxml.org
>  http://www.gccxml.org/mailman/listinfo/gccxml
>



More information about the gccxml mailing list