Boost logo

Boost :

From: Nick Ambrose (nick_at_[hidden])
Date: 1999-10-28 16:32:20

Well, I am by no means an expert in this area, but I *thought* decoration
was used to differentiate calling conventions in the linker
and usually meant sometime prepending an _ for certain conventions (pascal
?) and for some conventions, appending the number of bytes of stack space
required for the formal arguments to the function name.

i.e. f(int x, char *y)

might be decorated as
_f_at_4() // since an int and a char * are 4 bytes on our usual VC machine

this could then be mangled by the C++ section of the compiler to be maybe

_f_at_4_int_charstar() // or whatever.

Now, I could be wrong about all of this, or it could happen in the opposite
order, or the schemes could be merged for C++.
I *thought* that decoration wsa introduced in Win16 to account for
stdcall/cdecl calling differences.


Ed Brey wrote:

> Nick Ambrose wrote:
> >
> > Yeouch. I guess this is (kinda) OK if it really means decoration
> > (which is different than mangling here) and the decorated name
> > is then mangled. I am not sure that is the case though. How
> > many arguments are being passed to the function in question ?
> What is the difference between mangling and decoration. I had thought
> that there was just one concept, initially called mangling, and
> renamed by some to decoration. Correct me if I'm wrong, but the
> mangled/decorated name breaks everything down to its most primitive
> type, e.g.
> void fn(vector< shared_ptr<int> >&)
> becomes (in pseudo-mangled-code)
> fn_void_a1_ref_(vector_t2_(shared_ptr_t1_int)_allocator)
> The above is just a made-up mangling scheme, with some parentheses
> thrown in to make the prefix notation more readable, but (minus design
> flaws) it uniquely identifies the function and its arguments (and
> return code, which probably isn't necessary). So would this be
> mangling or decorating or neither?
> As I recall, then I got the warning, I may not have even been calling
> a function. Rather, I think the cause stemmed from typedefs within
> classes, like vector::iterator, defined within template classes with
> long template argument names and/or long template instantiation names.
> ------------------------------------------------------------------------
> Java or juggling?. Everybody learns something at Where
> you'll find thousands of free 2torials, affordable online courses, and
> useful tips for everyday life.
> home:
> - Simplifying group communications

Boost list run by bdawes at, gregod at, cpdaniel at, john at