V>Если я правильно понял (в чем я не до конца уверен), то есть два файла. В одном прописаны три пространства имен — fw, внутри которого win, и внутри которого io. Есть второй файл, в котором внутри fw прописан io. В таком случае ничего удивительного, что io_front из fw:win:io не виден в fw:io — это же совершенно другой неймспейс. Было бы как раз очень неправильно, если бы он был виден!
Не так.
Выше мы настроили, что все, что из win попадает в fw. Почему то для сущностей в win, получается, это работает.
Более того, если мы закомментим то, что видит пользователь, то вполне сможем использовать fw::io::io_impl. Т.е. с точки зрения меня, как клиента неймспейса fw, получается два (!!!!) вложенных в него неймспейса io, причем разных. Один это внесенный в область видимости из win, а второй нативный. Аргументы "за" такое поведение при лукапе я тоже могу привести, но тем не менее, в данном случае ситуация не очень логична.
AS>>1. Понять причину ошибки компиляции, в смысле, где в стандарте посмотреть (3.4.6 и 7.3 просмотрел, вроде ничего похожего). V>Надеюсь, на этот вопрос я ответил.
Никоим образом.
AS>>1 Добиться эффекта, чтобы fw::io мержилось с fw::io(from win) без дополнительного using. V>Невозможно, если я все правильно понял.
AS>>2. Возможно, есть способ как то порефакторить это, дабы избежать подобных или других проблем. V>А почему не классическое решение? V>class io {...}; V>clas win_io : io {...}; V>class nix_io : io {...};
V>class user_io : win_io
V>Или я чего-то кардинально недопонял?
Видимо, да. Все наоборот. Есть реализации (в неймспейсах платформы), и их наследует или использует конечный класс, который и будет пользовать клиент.