#include <iostream>
#include <type_traits>
#include <typeinfo>

struct Node {};

template <typename T>
inline void Acquire_Store(T *ptr, typename std::remove_const<T>::type value)
{
  std::cout << __PRETTY_FUNCTION__ << std::endl;
  std::cout << typeid(ptr).name() << std::endl;
}

int main()
{
  const Node *node = NULL;
  Acquire_Store(&node, static_cast<Node *> (NULL));
  const int a = 42;
  Acquire_Store (&a, 0);
  const int *b = &a;
  Acquire_Store (&b, static_cast<int *> (NULL) );
}