Benim SFINAE kodu değil, ancak MSVC 2013MSVC 2013 'türü': <code>std::enable_if</code> GCC & Clang içinde derler kullanarak std' üyesi :: enable_if <false,void>
kodu (also available on cpp.sh)
olduğunu GCC/Clang yılında#include <iostream>
#include <type_traits>
template <typename T, typename ... AdditionalInputs>
typename std::enable_if<sizeof...(AdditionalInputs) == 0, void>::type
CallDoDataProcessing(T var) {
std::cout << sizeof...(AdditionalInputs) << " additional inputs" << std::endl;
}
template <typename T, typename ... AdditionalInputs>
typename std::enable_if<sizeof...(AdditionalInputs) == 1, void>::type
CallDoDataProcessing(T var) {
std::cout << sizeof...(AdditionalInputs) << " additional inputs" << std::endl;
}
int main() {
CallDoDataProcessing<int>(3);
CallDoDataProcessing<int, int>(3);
return 0;
}
bu olsa MSVC, mükemmel çalışıyor, ben alıyorum:
Error 1 error C2039: 'type' : is not a member of 'std::enable_if<false,void>' c:\Users\mrussell\documents\visual studio 2013\Projects\ConsoleApplication1\ConsoleApplication1\ConsoleApplication1.cpp 5 1 ConsoleApplication1
derlenmiş ve çalıştırmak çıkış olmalıdır:
0 additional inputs
1 additional inputs
SO ile ilgili bazı benzer sorunları gördüm, ancak hiçbiri net bir cevaba sahip değildi ya da biraz bronzlaşmıştı.
MSVC enable_if sayfayı okuma, bu çalışması gerekir ...
nasıl MSVC2013 içinde SFINAE kullanabiliriz?Sadece bir not olarak
GÜNCELLEME, olumlu durumda bunu yapar çalışır. Örneğin, ilk işlevi ve buna çağrıyı söylersem, geri kalanı derler. yani CallDoDataProcessing
'daki enable_if<true, void>
, type
üyesine sahiptir. 'sizeof...(AdditionalInputs) == 0
olsa çalışmaz sürümünü bırakarak, bu yüzden (buna diyoruz. Aynı hata.
Bu sizeof...(AdditionalInputs) == 0
çağrı eşleşti ediliyor olmadığını göstermektedir, ancak can ve ikinci fonksiyonu dışında yorum Ancak
, t o olmaz anlamaya.
@AndyG Bunu hiç düşünmemiştim, sadece denedim ve fark yaratmıyor gibiydi. Dahil olanı göstermek için yukarıdaki kodu değiştireceğim. – Matt
İlk tahminim MSVC'yi güncellemeniz gerektiğidir. –