S
siddhu
Dear Experts,
I am trying to implement "Is a class type" for template arguments
using SFINAE.
program is like this:
#include<iostream>
using namespace std;
template <typename T>
class IsClass
{
private:
typedef char one;
typedef struct{char a[2];} two;
template<typename C>static one test(int C::*);
template<typename C>static two test(...);
public:
enum { Yes = sizeof(IsClass<T>::test<T>(0)) == 1 };
};
template<typename T>
void check()
{
if (IsClass<T>::Yes) {
std::cout << " Is Class" << std::endl;
}
else {
std::cout << " Not Class " << std::endl;
}
}
class ABCD
{
};
int main()
{
cout<<"int";
check<int>();
cout<<"ABCD";
check<ABCD>();
}
It does not compile on g++ compiler.
On CC it gives the following output:
int Not Class
ABCD Not Class
But the expected behavior for class ABCD was
ABCD Is Class.
Suggestions would be very helpful.
Thanks and Regards,
Siddharth
I am trying to implement "Is a class type" for template arguments
using SFINAE.
program is like this:
#include<iostream>
using namespace std;
template <typename T>
class IsClass
{
private:
typedef char one;
typedef struct{char a[2];} two;
template<typename C>static one test(int C::*);
template<typename C>static two test(...);
public:
enum { Yes = sizeof(IsClass<T>::test<T>(0)) == 1 };
};
template<typename T>
void check()
{
if (IsClass<T>::Yes) {
std::cout << " Is Class" << std::endl;
}
else {
std::cout << " Not Class " << std::endl;
}
}
class ABCD
{
};
int main()
{
cout<<"int";
check<int>();
cout<<"ABCD";
check<ABCD>();
}
It does not compile on g++ compiler.
On CC it gives the following output:
int Not Class
ABCD Not Class
But the expected behavior for class ABCD was
ABCD Is Class.
Suggestions would be very helpful.
Thanks and Regards,
Siddharth