#include <cstdarg> | |
#include <cstdint> | |
#include <cstdlib> | |
#include <ostream> | |
#include <new> | |
template<typename T = void> | |
struct Bar; | |
template<typename T> | |
union Foo { | |
const T *data; | |
}; | |
template<typename T, typename E> | |
union Tuple { | |
const T *a; | |
const E *b; | |
}; | |
template<typename T> | |
using Indirection = Tuple<T, float>; | |
extern "C" { | |
void root(Foo<int32_t> a, | |
Foo<float> b, | |
Bar<float> c, | |
Foo<Bar<float>> d, | |
Bar<Foo<float>> e, | |
Bar<Bar<float>> f, | |
Tuple<Foo<float>, float> g, | |
Indirection<float> h); | |
} // extern "C" |