LINUX.ORG.RU
Ответ на: комментарий от utf8nowhere

Спасибо. Если все в одном неймспейсе, то форвард декларация не нужна, подумал, что объявление друга годится за декларацию и не возникло мысли сделать ещё одну.

kvpfs_2
() автор топика
Последнее исправление: kvpfs_2 (всего исправлений: 1)
Ответ на: комментарий от kvpfs_2

Если все в одном неймспейсе, то форвард декларация не нужна

namespace Ns {
	class S {
		friend int Ns::main(); // error
		int i;
	};
}
<source>:3:18: error: friend declaration of 'main' does not match any declaration in namespace 'Ns'
    3 |                 friend int Ns::main(); // error
      |                                ^~~~
utf8nowhere ★★★
()

А чего все фейспалмят? Из-за того что мейн дружит с классами и нарушает инкапсуляцию и всё такое?

Я применил очень красивое и правильное решение - есть системный код и юзерский код. Юзерский код подвешивается в виде плагинов, и юзает интерфейс, который ему дает система. Очевидно, что нужно как-то ограничить юзера в правах (не дать ему дернуть, то апи, которое для него не предназначено). И тут либо скрывать все символы и экспортировать поштучно со всякими компайлер специфик штучками, либо передавать в системное апи структуру-метку, создавать которую могут лишь системные сущности через дружбу с этой меткой. Все в рамках языка, без всяких declspec_хуек_атрибут_hiden

kvpfs_2
() автор топика
Последнее исправление: kvpfs_2 (всего исправлений: 1)