Всем привет.
Есть следующий код:
// настройка связей, в конфиге, в зависимости от платформы.
namespace fw
{
namespace win
{
}
using namespace win;
}
// реализация
namespace fw
{
namespace win
{
namespace io
{
struct io_impl
{
};
}
}
}
// то, что видит пользователь
namespace fw
{
namespace io
{
// using namespace fw::win::io
struct io_front: io_impl // ошибка компиляции
{
};
}
}
Для чего это нужно — есть кроссплатформенный фреймворк, реализация для каждой платформы располагается в неймспейсе этой платформы. В зависимости от опций компиляции "морда" собирает это дело при помощи using директив в неймспейс интерфейса фремворка. Сейчас, кроме настройки, которая происходит автоматически, если есть вложенные "ниже" неймспейсы, приходится делать дополнительный using в интерфейсе с пользователем. Не сложно, но и не камильфо.
Что хочется.
1. Понять причину ошибки компиляции, в смысле, где в стандарте посмотреть (3.4.6 и 7.3 просмотрел, вроде ничего похожего).
1 Добиться эффекта, чтобы fw::io мержилось с fw::io(from win) без дополнительного using.
2. Возможно, есть способ как то порефакторить это, дабы избежать подобных или других проблем. Например, есть мысли неймспейсы реализации расположить в другом порядке: fw::io::win. Как в этом случае обеспечить автоматические линки неймспейсов, не очень понятно (делать include внутри неймспейсов как то некошерно, хотя в данном случае... не знаю, в общем, не по фен шую).
Всем спасибо!