A designação ``não básicos'' aplica-se a todos os que não são básicos nem correspondem a tipos de envelopes. Estes últimos são tratados de forma especial.
Existem duas formas de definir um tipo não básico. A primeira envolve o uso de typedef. A segunda envolve a composição a partir do tipo a partir de outros tipos, e.g. por definição de estruturas, e nela se inclui também a definição de enumerados.
CIDL suporta directamente typedef pelo que, na tradução a partir de C++, as definições de tipos C++ utilizando typedef podem ser simplesmente copiadas como existem originalmente, tendo-se o cuidado de traduzir os tipos básicos de que dependem. O mesmo se passa com enumerados e as estruturas: ambas as linguagens suportam a definição de tipos de dados enumerados (enum) e a definição de tipos estruturados (struct), sem esquecer que, em CIDL, struct, union e enum devem ser seguidas do nome do tipo, mesmo que na situação equivalente, em C++, ele fosse dispensável.
No caso dos restantes tipos, e.g. vectores, ponteiros, a tradução não é directa na maior parte dos casos. No caso de vectores, o problema é particularmente grave: em C++ é habitual representar vectores através de um ponteiro para uma posição de memória, sem que a dimensão esteja directamente associada; em CIDL é impossível encontrar uma representação rigorosa para esta entidade, partindo de C++: um ponteiro para uma posição de memória contendo um elemento não se distingue de uma que aponte para uma posição de memória contendo um número indeterminado de elementos. Um ponteiro ou um vector sem dimensão especificada serão considerados como, respectivamente, apontando e contendo apenas um objecto, apesar de CIDL suportar vectores de dimensão variável (sequence). As consequências para as cadeias de caracteres, representando a versão C++ do que em CIDL seria do tipo string, são evidentes.
A tabela 6.2 apresenta as conversões de tipos entre C++ e CIDL [Object Management Group and X/Open, 1992].
Table: Correpondências entre tipos de CIDL e C/C++.
Na tabela, any é um tipo que permite a especificação de qualquer tipo suportado por CIDL. Esta funcionalidade não é utilizada no protótipo, pois o sistema já dispõe da sua própria identificação de tipos.