#include <iostream>
/*
* This is a simple example code for defining a simpler, more verbose and possible more readable syntax for declaring types in C++11.
*/
/*
* -- Helper definitions for "named type definitions" --
*/
// For declaring pointers
template <typename T>
using ptr = T*;
// For declaring references
template <typename T>
using ref = T&;
// For declaring Arrays
template <typename T, size_t N>
using ary = T[N];
// For declaring function pointers
template <typename R, typename... P>
using fptr = R (*) (P...);
// For declaring "const"
template <typename T>
using cnst = const T;
// Define an example function with a "complex" signature
const int& test (const int* x [7], int* (&y) [7] ) {
return *(y[0]);
}
int main() {
// Define some simple variables using the simplified syntax
cnst<int> a = 42; // Constant integer
ary<double, 25> b; // Array
ref<ary<double, 25>> c = b; // Reference to array
ptr<ary<double, 25>> d = &b; // Pointer to array
// Define a function pointer to the above function
fptr<ref<cnst<int>>, ary<ptr<cnst<int>>,7>, ref<ary<ptr<int>, 7>>> myFun = &test;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKLyoKICogVGhpcyBpcyBhIHNpbXBsZSBleGFtcGxlIGNvZGUgZm9yIGRlZmluaW5nIGEgc2ltcGxlciwgbW9yZSB2ZXJib3NlIGFuZCBwb3NzaWJsZSBtb3JlIHJlYWRhYmxlIHN5bnRheCBmb3IgZGVjbGFyaW5nIHR5cGVzIGluIEMrKzExLgogKi8KCi8qCiAqIC0tIEhlbHBlciBkZWZpbml0aW9ucyBmb3IgIm5hbWVkIHR5cGUgZGVmaW5pdGlvbnMiIC0tCiAqLwoKLy8gRm9yIGRlY2xhcmluZyBwb2ludGVycwp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KdXNpbmcgcHRyID0gVCo7CgovLyBGb3IgZGVjbGFyaW5nIHJlZmVyZW5jZXMKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnVzaW5nIHJlZiA9IFQmOwoKLy8gRm9yIGRlY2xhcmluZyBBcnJheXMKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgp1c2luZyBhcnkgPSBUW05dOwoKLy8gRm9yIGRlY2xhcmluZyBmdW5jdGlvbiBwb2ludGVycwp0ZW1wbGF0ZSA8dHlwZW5hbWUgUiwJdHlwZW5hbWUuLi4gUD4KdXNpbmcgZnB0ciA9IFIgKCopIChQLi4uKTsKCi8vIEZvciBkZWNsYXJpbmcgImNvbnN0Igp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KdXNpbmcgY25zdCA9IGNvbnN0IFQ7CgovLyBEZWZpbmUgYW4gZXhhbXBsZSBmdW5jdGlvbiB3aXRoIGEgImNvbXBsZXgiIHNpZ25hdHVyZQpjb25zdCBpbnQmIHRlc3QgKGNvbnN0IGludCogeCBbN10sIGludCogKCZ5KSBbN10gKSB7CglyZXR1cm4gKih5WzBdKTsKfQoKCmludCBtYWluKCkgewoJLy8gRGVmaW5lIHNvbWUgc2ltcGxlIHZhcmlhYmxlcyB1c2luZyB0aGUgc2ltcGxpZmllZCBzeW50YXgKCQoJY25zdDxpbnQ+IGEgPSA0MjsgLy8gQ29uc3RhbnQgaW50ZWdlcgoJYXJ5PGRvdWJsZSwgMjU+IGI7IC8vIEFycmF5CglyZWY8YXJ5PGRvdWJsZSwgMjU+PiBjID0gYjsgLy8gUmVmZXJlbmNlIHRvIGFycmF5CglwdHI8YXJ5PGRvdWJsZSwgMjU+PiBkID0gJmI7IC8vIFBvaW50ZXIgdG8gYXJyYXkKCQoJCgkvLyBEZWZpbmUgYSBmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBhYm92ZSBmdW5jdGlvbgoJZnB0cjxyZWY8Y25zdDxpbnQ+PiwgYXJ5PHB0cjxjbnN0PGludD4+LDc+LCByZWY8YXJ5PHB0cjxpbnQ+LCA3Pj4+IG15RnVuID0gJnRlc3Q7CglyZXR1cm4gMDsKfQ==