Siempre que su biblioteca solo use C ++ 11 en su implementación y no exponga las instalaciones o tipos de C ++ 11 públicamente, y especialmente si usa un enlace estático, entonces sí, esto es posible e incluso estándar.
Considere el caso común en el que una biblioteca expone una interfaz de nivel C (que puede ser utilizada por la mayor variedad de clientes) pero que se implementa internamente en C ++. Los clientes que se vinculan con una biblioteca de este tipo solo deben preocuparse por la API binaria pública (funciones exportadas), que se limitará a ser C / C ++ heredado para una máxima compatibilidad. Un programa Java puede vincularse a API de nivel C que se implementan internamente en C ++. Esto no significa que Java necesite "soportar C ++". Del mismo modo, un cliente C / C ++ de estilo antiguo puede vincularse a una API de nivel C o C ++ que internamente utiliza alguna versión más vanguardista de las bibliotecas de C ++ o cualquier otra biblioteca. Dos cosas separadas: lo que se requiere para vincular a la interfaz de la biblioteca, y lo que la biblioteca misma vincula internamente (o extrae estáticamente).
Simplemente no expones a los clientes de tu biblioteca a las dependencias de tu implementación.
Si puede vincular estáticamente sus dependencias (C ++ 11 o cualquier otra cosa) a su biblioteca, esto es limpio y autónomo. La biblioteca es un verdadero cuadro negro: nada más que bytecode. Pero incluso si su biblioteca se vincula a sus dependencias a través del enlace "dinámico implícito" (no debe confundirse con el tipo de LoadLibrary / GetProcAddress explícito y los métodos similares en * nix y OS X), los clientes más antiguos aún deberían poder vincularse a esa biblioteca interfaz pública, incluso si no pudieran vincularse a las bibliotecas de las que depende la biblioteca .