// Matrix Construct // // Copyright (C) Matrix Construct Developers, Authors & Contributors // Copyright (C) 2016-2018 Jason Volk // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above // copyright notice and this permission notice is present in all copies. The // full license for this software is available in the LICENSE file. #pragma once #define HAVE_IRCD_CTX_SLICE_USAGE_WARNING_H namespace ircd::ctx { inline namespace this_ctx { struct slice_usage_warning; }} #ifdef RB_DEBUG struct ircd::ctx::this_ctx::slice_usage_warning { string_view fmt; va_rtti ap; ulong epoch; ulong start; template slice_usage_warning(const string_view &fmt, args&&... ap) :slice_usage_warning{fmt, va_rtti{ap...}} {} explicit slice_usage_warning(const string_view &fmt, va_rtti &&ap); ~slice_usage_warning() noexcept; }; #else struct ircd::ctx::this_ctx::slice_usage_warning { #if defined(__clang__) template slice_usage_warning(const string_view &fmt, args&&...) {} #else // In at least gcc 6.3.0 20170519, template param packs are not DCE'ed // so legacy varargs are used here. slice_usage_warning(const string_view &fmt, ...) {} #endif }; #endif