// DISABLED: win32 win64 // EXTRA_CPP_SOURCES: cpp_stdlib.cpp // CXXFLAGS(osx linux freebsd openbsd netbsd dragonflybsd solaris): -std=c++11 import core.stdc.stdio; // Disabled on windows because it needs bindings version (CppRuntime_LLVM) { extern(C++, `std`, `__1`) { struct allocator(T); struct vector (T, A = allocator!T); struct array (T, size_t N); } } else { extern(C++, `std`) { struct allocator(T); struct vector (T, A = allocator!T); struct array (T, size_t N); } } extern(C++): ref T identity (T) (ref T v); T** identityPP (T) (T** v); vector!T* getVector (T) (size_t length, const T* ptr); array!(T, N)* getArray(T, size_t N) (const T* ptr); void main () { int i = 42; float f = 21.0f; int* pi = &i; float* pf = &f; assert(42 == identity(i)); assert(21.0f == identity(f)); assert(&pi == identityPP(&pi)); assert(&pf == identityPP(&pf)); auto vi = getVector(1, &i); auto vf = getVector(3, [f, f, f].ptr); assert(vi !is null); assert(vf !is null); auto ai = getArray!(int, 4)([2012, 10, 11, 42].ptr); auto af = getArray!(float, 4)([42.0f, 21.0f, 14.0f, 1957.0f].ptr); assert(ai !is null); assert(af !is null); printf("Success\n"); }