¿Cuál es la diferencia entre typedef y using en C++? ¿Qué elegir?
¡Hola a todos! Estoy aprendiendo C++ y me encontré con dos formas de crear alias para tipos: el viejo `typedef` y el nuevo `using` de C++11. Parece que hacen lo mismo, pero he oído que `using` se ha vuelto preferible. ¿Pueden explicar cuál es la diferencia fundamental?
Aquí hay un ejemplo simple con `typedef`:
```cpp
typedef unsigned long ulong;
typedef int (*func_ptr)(double, char);
typedef std::vector int_vector;
```
Y lo mismo con `using`:
```cpp
using ulong = unsigned long;
using func_ptr = int(*)(double, char);
using int_vector = std::vector;
```
Por sintaxis, `typedef` me parece más confuso, especialmente para punteros a funciones. Pero, ¿hay diferencias funcionales? Por ejemplo, he oído que `using` funciona con templates, mientras que `typedef` no. ¿Pueden dar ejemplos de cuándo `using` es mejor, y si vale la pena usar `typedef` en código nuevo? ¡Gracias de antemano!
<<>>
Diferencia principal: alias de templates
La principal y más fundamental