// 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_MODS_IMPORT_H namespace ircd::mods { template struct import; } /// Representation of a symbol in a loaded shared library /// template struct ircd::mods::import :sym_ptr { template auto operator()(args&&... a) const { return sym_ptr::operator()(std::forward(a)...); } const T *operator->() const { return sym_ptr::operator->(); } const T &operator*() const { return sym_ptr::operator*(); } operator const T &() const { return sym_ptr::operator*(); } T *operator->() { return sym_ptr::operator->(); } T &operator*() { return sym_ptr::operator*(); } operator T &() { return sym_ptr::operator*(); } using sym_ptr::sym_ptr; };