Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Strange declaration(templates). C++

Tags:

c++

templates

How can I understand what is declared here: (this is taken from another post on this forum)

template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1];

Here's how I read:

template of static function f called with (ChT<int Fallback::*, &C::x>*), but then I can't make sense why is there an address-of operator and why is there an array?

I'm still learning how to understand C++ declarations, so please explain this slowly and carefully.

like image 407
There is nothing we can do Avatar asked Mar 17 '10 15:03

There is nothing we can do


1 Answers

Using some typedefs:

typedef char (&arrayref_t)[1];

This is a reference to an array of characters. The array has one element.

typedef ChT<int Fallback::*, &C::x> tmpl_t;

This is a template class, instantiated with the type "pointer to an int member of the Fallback class", and a member pointer to x in class C.

static arrayref_t f(tmpl_t*);

The function now takes a pointer to a tmpl_t and returns an arrayref_t.

like image 184
sth Avatar answered Sep 18 '22 03:09

sth