On 24.11.2017 08:38, Dirk Zimoch wrote:
vxWorks 6.3 fails with:
In file included from ../../src/client/client.cpp:15:
../../src/client/pv/pvAccess.h:1363: warning: `class
epics::pvAccess::ChannelProviderRegistry' has virtual functions but
non-virtual destructor
../../src/client/client.cpp:30: error: `struct
pvac::ClientChannel::Impl' is private
../../src/client/client.cpp:163: error: within this context
make[4]: *** [client.o] Error 1
gcc 3.4.4 probably follows this logic:
class epicsShareClass ClientChannel
{
struct Impl;
std::tr1::shared_ptr<Impl> impl;
friend class ClientProvider;
ClientChannel::Impl is a private type of ClientChannel and
ClientProvider is a friend.
struct ClientProvider::Impl
{
pva::ChannelProvider::shared_pointer provider;
epicsMutex mutex;
typedef std::map<std::pair<std::string, ClientChannel::Options>,
std::tr1::weak_ptr<ClientChannel::Impl> > channels_t;
channels_t channels;
};
ClientProvider::Impl is not a friend of ClientChannel thus it cannot use
the private ClientChannel::Impl.
It seems other compiler versions have a broader understanding of
friendship than this one.