मैं एक प्रोजेक्ट में फ़ंक्शन SFINAE का भारी उपयोग कर रहा हूं और सुनिश्चित नहीं हूं कि निम्नलिखित दो दृष्टिकोणों (शैली के अलावा) के बीच कोई अंतर है:
#include <cstdlib>
#include <type_traits>
#include <iostream>
template <class T, class = std::enable_if_t<std::is_same_v<T, int>>>
void foo()
{
std::cout << "method 1" << std::endl;
}
template <class T, std::enable_if_t<std::is_same_v<T, double>>* = 0>
void foo()
{
std::cout << "method 2" << std::endl;
}
int main()
{
foo<int>();
foo<double>();
std::cout << "Done...";
std::getchar();
return EXIT_SUCCESS;
}
कार्यक्रम आउटपुट उम्मीद के मुताबिक है:
method 1
method 2
Done...
मैंने देखा है कि स्टैकओवरफ़्लो में विधि 2 का अधिक बार उपयोग किया जाता है, लेकिन मुझे विधि 1 पसंद है।
क्या कोई परिस्थिति है जब ये दोनों दृष्टिकोण अलग-अलग हैं?