За умови, що ваша бібліотека використовує лише C ++ 11 для своєї реалізації та не відкриває C ++ 11 засобів або типів публічно, і особливо якщо ви використовуєте статичну зв'язок, то так, це можливо і навіть стандартно.
Розглянемо поширений випадок, коли бібліотека має інтерфейс рівня C (для використання найширшим числом клієнтів), але внутрішньо реалізований у C ++. Клієнти, що посилаються на таку бібліотеку, потребують лише турбуватися про публічний бінарний API (експортовані функції), який ви обмежили, щоб він мав бути встановленим C / C ++ для максимальної сумісності. Програма Java може посилатися на API рівня C, які внутрішньо реалізовані в C ++. Це не означає, що Java повинна "підтримувати C ++". Аналогічно, клієнт C / C ++ старого стилю може посилатися на API рівня C або C ++, який використовує внутрішню версію авангардної версії C ++ libs або будь-якого іншого. Дві окремі речі: те, що потрібно для посилання на інтерфейс бібліотеки, а також те, що сама бібліотека внутрішньо посилається на (або переносить статично).
Ви просто не піддаєте клієнтів вашої бібліотеки залежностями своєї реалізації.
Якщо ви можете статично пов’язати свої залежності (C ++ 11 чи будь-що інше) у вашій бібліотеці, це чисто і незалежно. Бібліотека - це справжнє чорне поле: нічого, крім байт-коду. Але навіть якщо ваша бібліотека посилається на ваші залежності за допомогою "неявної динамічної" зв'язку (не плутати з виразністю LoadLibrary / GetProcAddress та подібними методами на * nix та OS X), старші клієнти все одно повинні мати можливість посилання на цю бібліотеку публічний інтерфейс, навіть якщо вони не змогли зв’язатися з бібліотеками, від яких залежить бібліотека .