В современных языках динамическая типизация или статическая определяется исключительно разработчиком.
TypeScript:
// Динамика это круто
function f(a, b) {
// Будь что будет
return a * b;
}
f(1, "abc") // Ну и что, что получаем NaN, зато не надо писать типы. Красота !
// Укажу динамический тип. Динамика это круто
function g(a: any, b: any): any {
// Будь что будет
return a * b;
}
// Статика это тоже круто
function h(a: number, b: number): number {
// Умножаем числа
return a * b;
}
h(1, "abc") // Плохой компилятор, не хочу ошибку компиляции
C#:
public class Program
{
// Динамика это круто
public static dynamic g(dynamic a, dynamic b) {
// Будь что будет
return a * b;
}
// Статика это тоже круто
public static int h(int a, int b) {
// Умножаем числа
return a * b;
}
public static void Main()
{
g(1, "abc"); // Кидает исключение, ерунда. Зато принимает любые типы
h(1, "abc") // Плохой компилятор, не хочу ошибку компиляции
}
}
Идея иметь compact_optional который будет занимать столько же места.
И использовать примерно так:
using opt_count = compact_optional<evp_int<int, -1>, class cnt_tag>;
TypeScript:
C#:
И использовать примерно так:
using opt_count = compact_optional<evp_int<int, -1>, class cnt_tag>;
https://akrzemi1.wordpress.com/2015/07/15/efficient-optional-values/