ponteiro dos membros pode contornar o nível de acesso de um membr

Nosso infame litb tem um artigo interessante sobre como contornar a verificação de acesso.

É totalmente demonstrado por este código simples:

#include <iostream>

template<typename Tag, typename Tag::type M>
struct Rob { 
  friend typename Tag::type get(Tag) {
    return M;
  }
};

// use
struct A {
  A(int a):a(a) { }
private:
  int a;
};

// tag used to access A::a
struct A_f { 
  typedef int A::*type;
  friend type get(A_f);
};

template struct Rob<A_f, &A::a>;

int main() {
  A a(42);
  std::cout << "proof: " << a.*get(A_f()) << std::endl;
}

Que compila e executa (output42) comgcc 4.3.4, gcc 4.5.1, gcc 4.7.0 (consulte o comentário de user1131467) e compila com Clang 3.0 e Comeau C / C ++ 4.3.10.1 em C ++ 03 modo estrito e MSVC 2005.

Luchian me pediu emesta resposta no qual eu o usei para justificar que era realmente legal. Concordo com Luchian que é estranho, no entanto, Clang e Comeau são concorrentes próximos dos compiladores "Padrão" disponíveis (muito mais que o MSVC por padrão) ...

E não encontrei nada nos rascunhos das Normas que tenho disponíveis (n3337 sendo a última versão em que pus minhas mãos

Então ... alguém pode realmente justificar que élegal ou não ?