diff --git a/src/emu/devcb.h b/src/emu/devcb.h index 3eca106611d..2505527caf6 100644 --- a/src/emu/devcb.h +++ b/src/emu/devcb.h @@ -466,9 +466,13 @@ private: std::string m_message; }; + template class transform_builder; // workaround for GCC 8 not implementing friend properly + class builder_base { protected: + template friend class transform_builder; // workaround for GCC 8 not implementing friend properly + builder_base(devcb_read &target, bool append) : m_target(target), m_append(append) { } builder_base(builder_base const &) = delete; builder_base(builder_base &&) = default; @@ -1047,9 +1051,15 @@ private: virtual func_t create() override { return [] (address_space &space, offs_t offset, Input data, std::make_unsigned_t mem_mask) { }; } }; + template class transform_builder; // workaround for GCC 8 not implementing friend properly + template class first_transform_builder; // workaround for GCC 8 not implementing friend properly + class builder_base { protected: + template friend class transform_builder; // workaround for GCC 8 not implementing friend properly + template friend class first_transform_builder; // workaround for GCC 8 not implementing friend properly + builder_base(devcb_write &target, bool append) : m_target(target), m_append(append) { } builder_base(builder_base const &) = delete; builder_base(builder_base &&) = default; @@ -1361,7 +1371,7 @@ private: Delegate m_delegate; }; - friend class delegate_builder::wrapped_builder; + friend class wrapped_builder; // workaround for MSVC delegate_builder(delegate_builder const &) = delete; delegate_builder &operator=(delegate_builder const &) = delete; @@ -1493,7 +1503,7 @@ private: int const m_linenum; }; - friend class inputline_builder::wrapped_builder; + friend class wrapped_builder; // workaround for MSVC inputline_builder(inputline_builder const &) = delete; inputline_builder &operator=(inputline_builder const &) = delete; @@ -1650,7 +1660,7 @@ private: int const m_value; }; - friend class latched_inputline_builder::wrapped_builder; + friend class wrapped_builder; // workaround for MSVC latched_inputline_builder(latched_inputline_builder const &) = delete; latched_inputline_builder &operator=(latched_inputline_builder const &) = delete; @@ -1784,7 +1794,7 @@ private: std::string m_tag; }; - friend class ioport_builder::wrapped_builder; + friend class wrapped_builder; // workaround for MSVC ioport_builder(ioport_builder const &) = delete; ioport_builder &operator=(ioport_builder const &) = delete; @@ -1884,7 +1894,7 @@ private: std::string m_tag; }; - friend class membank_builder::wrapped_builder; + friend class wrapped_builder; // workaround for MSVC membank_builder(membank_builder const &) = delete; membank_builder &operator=(membank_builder const &) = delete; @@ -1981,7 +1991,7 @@ private: std::string m_tag; }; - friend class output_builder::wrapped_builder; + friend class wrapped_builder; // workaround for MSVC output_builder(output_builder const &) = delete; output_builder &operator=(output_builder const &) = delete; @@ -2075,7 +2085,7 @@ private: std::string m_message; }; - friend class log_builder::wrapped_builder; + friend class wrapped_builder; // workaround for MSVC log_builder(log_builder const &) = delete; log_builder &operator=(log_builder const &) = delete; diff --git a/src/emu/emumem.h b/src/emu/emumem.h index 08dbd02ab77..df3efc57385 100644 --- a/src/emu/emumem.h +++ b/src/emu/emumem.h @@ -240,7 +240,7 @@ template class memory_units_descriptor; // =====================-> Address segmentation for the search tree -static inline constexpr int handler_entry_dispatch_lowbits(int highbits, int width, int ashift) +constexpr int handler_entry_dispatch_lowbits(int highbits, int width, int ashift) { return (highbits > 48) ? 48 : (highbits > 32) ? 32 :