cmake/Tests/CompileFeatures/cxx_contextual_conversions.cpp

43 lines
635 B
C++
Raw Normal View History

2015-04-27 22:25:09 +02:00
2016-07-09 11:21:54 +02:00
#define assert(E) \
if (!(E)) \
return 1;
2015-04-27 22:25:09 +02:00
2016-07-09 11:21:54 +02:00
template <class T>
2015-04-27 22:25:09 +02:00
class zero_init
{
public:
2016-07-09 11:21:54 +02:00
zero_init()
: val(static_cast<T>(0))
{
}
zero_init(T val)
: val(val)
{
}
operator T&() { return val; }
operator T() const { return val; }
2015-04-27 22:25:09 +02:00
private:
T val;
};
int someFunc()
{
2016-07-09 11:21:54 +02:00
zero_init<int*> p;
assert(p == 0);
2015-04-27 22:25:09 +02:00
p = new int(7);
2016-07-09 11:21:54 +02:00
assert(*p == 7);
2015-04-27 22:25:09 +02:00
delete p;
2016-07-09 11:21:54 +02:00
zero_init<int> i;
assert(i == 0);
2015-04-27 22:25:09 +02:00
i = 7;
2016-07-09 11:21:54 +02:00
assert(i == 7);
switch (i) {
}
2015-04-27 22:25:09 +02:00
2016-07-09 11:21:54 +02:00
int* vp = new int[i];
2015-04-27 22:25:09 +02:00
return 0;
}