Qual é a diferença entre typedef e using em C++? O que escolher?
Olá a todos! Estou estudando C++ e me deparei com duas maneiras de criar aliases para tipos: o bom e velho `typedef` e o novo `using` do C++11. Parece que fazem a mesma coisa, mas ouvi dizer que `using` se tornou preferível. Vocês podem explicar qual é a diferença fundamental?
Aqui está um exemplo simples com `typedef`:
```cpp
typedef unsigned long ulong;
typedef int (*func_ptr)(double, char);
typedef std::vector int_vector;
```
E o mesmo com `using`:
```cpp
using ulong = unsigned long;
using func_ptr = int(*)(double, char);
using int_vector = std::vector;
```
Em termos de sintaxe, `typedef` me parece mais confuso, especialmente para ponteiros para funções. Mas existem diferenças funcionais? Por exemplo, ouvi dizer que `using` funciona com templates, enquanto `typedef` não. Vocês podem dar exemplos de quando `using` é vantajoso, e se vale a pena usar `typedef` em código novo? Desde já, obrigado!
<<>>
Diferença principal: aliases de template
A principal e mais fundamental