Se la tua libreria utilizza solo C ++ 11 nella sua implementazione e non espone pubblicamente strutture o tipi C ++ 11, e specialmente se usi il collegamento statico, allora sì, questo è possibile e persino standard.
Considera il caso comune in cui una libreria espone un'interfaccia di livello C (per essere utilizzabile dalla più ampia varietà di client) ma che è implementata internamente in C ++. I client che si collegano a tale libreria devono solo preoccuparsi dell'API pubblica binaria (funzioni esportate), che sarà vincolata a essere legacy C / C ++ per la massima compatibilità. Un programma Java può collegarsi alle API a livello C che sono implementate internamente in C ++. Ciò non significa che Java abbia bisogno di "supportare C ++". Allo stesso modo, un client C / C ++ vecchio stile può collegarsi a un'API di livello C o C ++ che utilizza internamente una versione più avanzata delle librerie C ++ o di altre librerie. Due cose distinte: cosa è necessario collegare all'interfaccia della libreria e cosa la libreria stessa collega internamente (o estrae staticamente).
Semplicemente non esporre i client della tua libreria alle dipendenze della tua implementazione.
Se puoi collegare staticamente le tue dipendenze (C ++ 11 o qualsiasi altra cosa) nella tua libreria, questo è pulito e autonomo. La biblioteca è una vera scatola nera: nient'altro che il bytecode. Ma anche se la libreria si collega alle dipendenze tramite il collegamento "implicito dinamico" (da non confondere con il tipo LoadLibrary / GetProcAddress esplicito e i metodi simili su * nix e OS X), i client più vecchi dovrebbero comunque essere in grado di collegarsi a quella libreria interfaccia pubblica, anche se non potevano collegarsi alle librerie la libreria dipende da .