Visual C ++ 12 (podgląd VS2013) szablon zmienny z obejściem parametru funkcji

Właśnie się złożyłemten błąd w Microsoft Connect w odniesieniu do niemożności skompilowania następującego fragmentu kodu zabawki:

template <typename... P> struct S {
    template <void(*F)(P...)> static void T() { }
};

void A(int, float) { }
int main() { S<int, float>::T<&A>(); }

Błąd jest:

test.cpp(2): error C3520: 'P' : parameter pack must be expanded in this context

Zasadniczo nie mogę rozpakować typu zmiennoprzecinkowego wewnątrz sygnatury funkcji, gdy jest używany jako parametr szablonu. Ten kod jest (myślę) legalny; przynajmniej GCC 4.7, Clang 3.0 i ICC 13 to wszystko obsługują.

widziałemto pytanie TAK ale nie są wymagane ani podane żadne obejścia, czego szukam.

Chociaż nie jest superkryzysowy (oczywiście od wielu lat radzę sobie bez szablonów zmiennych), ten wzorzec ma szczególne znaczenie dla niektórych prac, które chciałbym wykonać, a niektóre artykuły chciałbym zrobić w C ++ 11 technik refleksji dla serializacji, wiązania skryptów itp., Które chciałbym być użyteczny dla użytkowników Visual Studio (ponieważ jest zdecydowanie dominującym zestawem narzędzi kompilujących w mojej branży). Chciałbym mieć nadzieję, że inżynierowie Microsoftu będą w stanie to naprawić do 2013 RTM, ale nie wstrzymuję oddechu.

Zabawką (tym razem z pamięci) jest próbka tego, jak to jest używane (minus makra, które sprawiają, że jest nieco łatwiejszy w użyciu):

Reflect<MyType>("MyType")
.bind("GetMatrix", mat44, &MyType::GetMatrix>()
.bind("Display", void, &MyType::Display>();

Oczywiście wszystko to można zrobić bez szablonów o zmiennym rozmiarze. To po prostu zabiera duże ilości kodu i akceptuje ograniczenia do maksymalnej arity związanych funkcji składowych, oczywiście. I tak, przekazywanie funkcji jako parametr szablonu jest importowane, ze względu na naturę sposobu, w jaki wskaźniki funkcji funkcji działają w Visual Studio (zmienna wielkość) i chęć osiągnięcia wydajności na równi zNiemożliwe szybkie delegowanie C ++ (w mojej niszy społeczności C ++ ten poziom optymalizacji może czasami mieć znaczenie), co neguje opcję używaniastd::function lub podobne projekty.

Czy istnieje jakiś problem z tym błędem VS? Lub jakikolwiek inny sposób użycia szablonów zmiennych do użycia parametru wskaźnika funkcji (kompilacji) w VC ++ 12?

questionAnswers(1)

yourAnswerToTheQuestion