text: For a more general discussion, and the reasons to support transparent garbage collection, please see N2310.
  [Note: Objects allocated by allocation functions must be properly referenced through chains of pointers until they are dereferenced or deallocated. The following makes this requirement precise. This allows, but does not require, implementations to reclaim unreferenced objects. -- end note.]
  A sequence of characters in an array of characters, whose size and alignment matches that of a pointer type.
  A pointer value contained in a traceable pointer location is a reconstituted pointer if it was computed by:
  [Note: Whether or not a pointer value is safely derived is a property of how it was computed, and usually not of its actual representation. In particular, two pointers may be equal, and one of them may be safely derived, while the other is reconstituted. --end note]
  A pointer to storage obtained from an allocation function shall be dereferenced or passed to a deallocation function only if it was either safely derived, or the referenced object was previously declared reachable (see [library:declare_reachable]).
  It is unclear where we should allow pointers to be stored. We tentatively went with a fairly lax interpretation of what the current standard allows. We do need to allow copies in char arrays, and pointers in intptr_t variables. Whether we should allow them in other sufficiently large integer variables is up to debate.
  We could probably get closer to the N2310 definitions if we allowed reconstituted pointers to be dereferenced if a safely derived pointer to the same object is stored in a non-stack location. That seems worth considering. It would technically eliminate the need for declare_reachable(), since it could be implemented by the user. It would outlaw some kinds of dead global dead variable and dead field elimination in garbage-collected implementations. These are probably rarely practical for C++ in any case.
  Objects constructed by the standard library that may hold a user-supplied pointer value, or an integer of type intptr_t, shall store them in a traceable pointer location (see 3.7.3.3). [Note: Other libraries are strongly encouraged to do the same, since not doing so may result in accidental use of reconstituted pointers. Libraries that store pointers outside the user's address space should make it appear that they are stored and retrieved from a traceable pointer location. --end note]
  The argument is subsequently declared reachable (see 3.7.3.3). Reconstituted pointers to the same object may be dereferenced while the object is declared reachable.
  Once the number of calls to undeclare_reachable(p) equals the number of calls to declare_reachable(p), the argument is no longer declared reachable (see [above section]). When this happens, reconstituted pointers to the object referenced by p may not be subsequently dereferenced. [Note: Since the returned pointer is safely derived, it may be used to access the referenced object, even if previously no safely derived pointer existed. -- end note]
  The object referenced by p shall have been previously declared reachable, and shall be live from the time of the call until the last undeclare_reachable(p) call on the object.
  The n bytes starting at p no longer contain traceable pointer locations, independent of their type. Hence pointers located there may no longer be dereferenced. [Note: This may be used to inform a garbage collector or leak detector that this region of memory need not be traced.]
  Prepares an object containing a range registered with declare_no_pointers() for destruction. It must be called before the lifetime of the object ends. It has no other effect. It does not recreate any traceable pointer locations in the object.
  Storage allocated directly with malloc(), calloc(), or realloc() is implicitly declared reachable (see 3.7.3.3) on allocation, ceases to be declared reachable on deallocation, and may not cease to be declared reachable as the result of an undeclare_reachable() call. [Note: This allows existing C libraries to remain unaffected by restrictions on reconstituted pointers, at the expense of providing far fewer garbage collection and leak detection options for malloc()-allocated objects. It also allows malloc() to be implemented with a separate allocation arena, bypassing the normal declare_reachable() implementation. The above functions should never intentionally be used as a replacement for declare_reachable(), and newly written code is strongly encouraged to treat memory allocated with these functions as though it were allocated with operator new. --end note]
  Currently undeclare_reachable is a template, while declare_reachable operates on a void *. This is intentional, since only the former returns a pointer. Having the latter return a pointer is far less useful, and doesn't quite fit the name, though it may still be the right option.
  It is almost certainly safe to dereference a reconstituted pointer if the object will be correctly declared reachable later. This is probably too confusing and useless to guarantee.
  In 1994 Jimmy Page and Robert Plant collaborated on a new musical project for the first time since the death 14 years earlier of Led Zeppelin's drummer, John Bonham. The reunion resulted from an invitation to appear on MTV's hit series Unplugged. But Page and Plant wanted to steer clear of nostalgia, so they excluded former Zeppelin bassist John Paul Jones from the project and named it Unledded.
  The resulting album and DVD feature an assortment of Zeppelin songs that were reinterpreted with the help of an Egyptian ensemble, an Indian vocalist and the London Metropolitan Orchestra, but perhaps the most interesting part of the project was a trio of new songs recorded with local musicians in Marrakesh, Morocco. Those performances, shown here, were the result of a collaboration with traditional musicians of the Gnawa minority, whose sub-Saharan ancestors were brought to Morocco many centuries ago as slaves.
  "We'd never met the Gnawa when we went there," said Plant in a 1994 interview, "but they were very patient, and smiling is a great currency." Gnawa music is traditionally performed for prayer and healing, and differs from other North African music. "They play a kind of music which is much more akin to the music of the Mississippi Delta than it is to do with Arab music," Plant said in another interview. "It's haunting, seductive, and quite alluring."
  Gnawa is the style of music, not the ethnicity of the people playing it. In fact, there is no stipulation that any one type of person can play Gnawa music. That having been said, the style is heavily influenced by the Berber population in Morocco (and throughout North Africa), who were slaves who found their way to freedom by following the ‘nijmat al-janub’ (star of the south).
  I’m always interesting in finding out about errors and correcting them, if necessary. But in this case I don’t see your point. The Gnawa are most certainly a people, and Page and Plant were collaborating with a few of them. I wasn’t saying anything about who may or may not play Gnawa music.