Es handelt sich um einen Funktionstyp, der nur im Typsystem existiert. Es kann niemals erstellt werden.
Aber das ist weder ein Zeiger auf ein Element-Methode, die Unterschrift sein könnte:
int(T::*)(int) &
Es ist dies, ohne den Zeiger. Das Typsystem ermöglicht es Ihnen, dies als einen Typ zu beschreiben.
#include <type_traits>
struct T { };
using A = int(int) &;
using B = A T::*;
using C = int(T::*)(int) &;
static_assert(std::is_same_v<B, C>);
@ T.C. Erwähnungen PR0172R0, die diskutiert, wie die Anwesenheit dieser Typen Probleme für Bibliotheksautoren verursacht, und schlägt mehrere Optionen vor, die diese Probleme reduzieren könnten. Eine der Optionen ist, sie vollständig zu beseitigen, andere reduzieren deren Auswirkungen. Abhängig davon, wie das geht, ist diese Antwort möglicherweise für zukünftige Versionen von C++ korrekt oder nicht korrekt.
Ich würde auf die schöne Zusammenfassung in [P0172R0] verlinken (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0172r0.html). –
@ T.C. Danke, fügte eine Erwähnung hinzu. – hvd
Ich glaube, Sie können auch 'mit A = int (int) &; Struktur Bob {A foo; }; '. – Yakk