summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2018-07-08 15:19:03 +1000
committer Vas Crabb <vas@vastheman.com>2018-07-08 15:19:03 +1000
commit1122abfcee0b83a358c63b1e9896065aca8ab194 (patch)
treea05982915f334c85e0265847b2cde7b5cb31ba3c
parent2c552c44b524330f0fbea6660921f755c69164f5 (diff)
if this doesn't work around GCC 8, file a bug with GNU (nw)
-rw-r--r--src/emu/devcb.h24
-rw-r--r--src/emu/emumem.h2
2 files changed, 18 insertions, 8 deletions
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 <typename Source, typename Func> class transform_builder; // workaround for GCC 8 not implementing friend properly
+
class builder_base
{
protected:
+ template <typename T, typename U> 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<Input> mem_mask) { }; }
};
+ template <typename Source, typename Func> class transform_builder; // workaround for GCC 8 not implementing friend properly
+ template <typename Sink, typename Func> class first_transform_builder; // workaround for GCC 8 not implementing friend properly
+
class builder_base
{
protected:
+ template <typename T, typename U> friend class transform_builder; // workaround for GCC 8 not implementing friend properly
+ template <typename T, typename U> 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<int Width, int AddrShift, int Endian> 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 :