(C++ : Template) 기타) SFINAE

Posted by : at

Category : Cpp


  • SFINAE(Subtitution Faiure Is Not An Error)
#include <iostream>
using namespace std;

template<typename T>
void foo(T t) { cout << "T" << endl; }
void foo(itn t) { cout << "int" << endl; }
void foo(...) { cout << "..." << endl; }

int main()
{
    foo(3);     // int - exactly matching
}
#include <iostream>
using namespace std;

template<typename T>
void foo(T t) { cout << "T" << endl; }
// void foo(itn t) { cout << "int" << endl; }
void foo(...) { cout << "..." << endl; }

int main()
{
    foo(3);     // T
}
#include <iostream>
using namespace std;

template<typename T>
// void foo(T t) { cout << "T" << endl; }
// void foo(itn t) { cout << "int" << endl; }
void foo(...) { cout << "..." << endl; }

int main()
{
    foo(3);     // ...
}
template<typename T>
void foo(T t) { cout << "T" << endl; }

void foo(...) { cout << "..." << endl; }

int main()
{
    foo(3);     // T
}
template<typename T>
int foo(T t) { cout << "T" << endl; return 0; }

void foo(...) { cout << "..." << endl; }

int main()
{
    foo(3);     // T
}
template<typename T>
typename T::type foo(T t) // int::type foo(int t) - 잘못된 표현이다.
{ 
    cout << "T" << endl; 
    return 0; 
}

void foo(...) { cout << "..." << endl; }

int main()
{
    foo(3);     // 에러가 나올것인가?
    // 에러가 나오지 않고 ...가 호출된다. -> SFINAE
}

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links