@@ -79,6 +79,14 @@ template <typename T>
7979inline constexpr bool has_try_dequeue_v = has_try_dequeue<T>::value;
8080} // namespace detail
8181
82+ // On earlier versions of compilers (especially clang) you cannot
83+ // rely on defaulted template template parameters working as intended
84+ // This overload explicitly has 1 template paramter which is what
85+ // `Logger` expects, it uses the default 512 from ReaderWriterQueue as
86+ // the hardcoded MaxBlockSize
87+ template <typename T>
88+ using rtlog_SPSC = moodycamel::ReaderWriterQueue<T, 512 >;
89+
8290/* *
8391 * @brief A logger class for logging messages.
8492 * This class allows you to log messages of type LogData.
@@ -97,10 +105,15 @@ inline constexpr bool has_try_dequeue_v = has_try_dequeue<T>::value;
97105 * @tparam QType is the configurable underlying queue. By default it is a SPSC
98106 * queue from moodycamel. WARNING! It is up to the user to ensure this queue
99107 * type is real-time safe!!
108+ *
109+ * Requirements on QType:
110+ * 1. Is real-time safe
111+ * 2. Accepts one type template paramter for the type to be queued
112+ * 3. Has methods `try_enqueue` and `try_dequeue`
100113 */
101114template <typename LogData, size_t MaxNumMessages, size_t MaxMessageLength,
102115 std::atomic<std::size_t > &SequenceNumber,
103- template <typename > class QType = moodycamel::ReaderWriterQueue >
116+ template <typename > class QType = rtlog_SPSC >
104117class Logger {
105118public:
106119 using InternalLogData = BasicLogData<LogData, MaxMessageLength>;
0 commit comments