mirror of
https://github.com/Light-City/CPlusPlusThings.git
synced 2026-02-09 13:26:34 +08:00
support bazel complie this project and format code.
This commit is contained in:
33
learn_class/modern_cpp_30/SFINAE/SFINAE.cpp
Normal file
33
learn_class/modern_cpp_30/SFINAE/SFINAE.cpp
Normal file
@@ -0,0 +1,33 @@
|
||||
//
|
||||
// Created by light on 20-1-5.
|
||||
//
|
||||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
template <typename T> class IsClassT {
|
||||
private:
|
||||
typedef char One;
|
||||
typedef struct {
|
||||
char a[2];
|
||||
} Two;
|
||||
|
||||
template <typename C> static One test(int C::*);
|
||||
|
||||
// Will be chosen if T is anything except a class.
|
||||
template <typename C> static Two test(...);
|
||||
|
||||
public:
|
||||
enum { Yes = sizeof(IsClassT<T>::test<T>(0)) == 1 };
|
||||
enum { No = !Yes };
|
||||
};
|
||||
|
||||
struct A {};
|
||||
|
||||
int main() {
|
||||
// 0不能转换为int int::*因为int不是类,所以它不能有成员指针。
|
||||
cout << IsClassT<int>::Yes << endl;
|
||||
cout << IsClassT<A>::Yes << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user