File: cpp_stdlib.d

package info (click to toggle)
gcc-arm-none-eabi 15%3A12.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 959,712 kB
  • sloc: cpp: 3,275,382; ansic: 2,061,766; ada: 840,956; f90: 208,513; makefile: 76,132; asm: 73,433; xml: 50,448; exp: 34,146; sh: 32,436; objc: 15,637; fortran: 14,012; python: 11,991; pascal: 6,787; awk: 4,779; perl: 3,054; yacc: 338; ml: 285; lex: 201; haskell: 122
file content (58 lines) | stat: -rw-r--r-- 1,294 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// 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_Clang)
{
    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");
}