Zeiger auf Klassenmitglied als Vorlagenparameter

Ich möchte einen Zeiger auf ein Klassenmitglied als Vorlagenparameter verwenden, wie in:

template <class Class, class Result, Result Class::*Member>
struct MyStruct {
    // ...
};

Verwenden Sie diese Struktur wieMyStruct<SomeClass, SomeResult, &SomeClass::value> variable funktioniert ganz gut, aber ich mag es nicht, dass ich angeben mussSomeClass undSomeResult.

Ich würde gerne nutzenMyStruct<&SomeClass::value> variable Wenn dies möglich ist, aber ohne die Fähigkeit zu verlieren, eine Klasse zu bestehen und einen Ergebnistyp zu haben.

Ich habe Folgendes versucht, aber die Syntax ist ungültig:

template <class Class, class Result>
template <Result Class::*Member>
struct MyStruct {
    // ...
};

Fehler: zu viele Template-Parameter-Listen

Ich habe versucht, eine Hilfsfunktion zu verwenden (die zwar in Clang funktioniert, aber von GCC abgelehnt wird):

template <class Class, class Result>
static constexpr auto makeMyStruct(Result Class::*member) ->
MyStruct<Class, Result, member> {
    // ...
}

Fehler: Verwendung des Parameters 'member' außerhalb des Funktionskörpers
Fehler: Vorlagenargument 3 ist ungültig

Ist es möglich, eine einfache zu habenMyStruct<&SomeClass::value>und wenn ja, wie?

Verwandte Frage, die meine Frage nicht gelöst hat:

Zeiger auf Klassenmitglied als Template-ParameterC ++ 0x Fehler mit constexpr und Rückgabe der Template-Funktion

Antworten auf die Frage(4)

Ihre Antwort auf die Frage