Boost logo

Boost :

Subject: Re: [boost] [Boost.DLL] Formal Review request
From: Niall Douglas (s_sourceforge_at_[hidden])
Date: 2014-10-04 18:34:27


On 4 Oct 2014 at 14:42, Mathias Gaunard wrote:

> On 04/10/2014 13:24, Niall Douglas wrote:
>
> > Andrey, please list here three C++ compilers which had at least one
> > version release in the past five years which doesn't provide a magic
> > macro expanding out to the mangling of the enclosing function.
>
> What about MinGW?

I just ran the following program on MinGW:

#include <iostream>
#include <typeinfo>

template<class T> void doprint(T a)
{
  std::cout << __func__ << std::endl;
  std::cout << __FUNCTION__ << std::endl;
  std::cout << __PRETTY_FUNCTION__ << std::endl;
  struct $$$ { };
  std::cout << typeid($$$).name() << std::endl;
}
template<class T> struct doprint$$$___$$$ { };

int main(void)
{
  doprint(1);
  std::cout << typeid(doprint$$$___$$$<int>).name() << std::endl;
  return 0;
}

It prints:

doprint
doprint
void doprint(T) [with T = int]
Z7doprintIiEvT_E3$$$
16doprint$$$___$$$IiE

Something I was wrong about is that there is no equivalent to
__FUNCDSIG__ in GCC - I had thought that __FUNCTION__ produced
mangled symbols, and I was wrong on that - I can find no magic macro
for GCC which can. You can however still fall back onto typeid,
albeit this forces a dependency on RTTI. I suppose one could just
parse one's own ELF binary headers to look up mangled symbols you
yourself instantiated, but that is getting a bit extreme.

Niall

-- 
ned Productions Limited Consulting
http://www.nedproductions.biz/ 
http://ie.linkedin.com/in/nialldouglas/



Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk