//#region src/util/defer.d.ts
/**
 * Creates a `Disposable` object that runs the given callback when it is disposed.
 *
 * Use it with `using` declarations from
 * [Explicit Resource Management](https://github.com/tc39/proposal-explicit-resource-management)
 * to ensure cleanup code runs when the enclosing scope exits, even if an error is thrown.
 *
 * For asynchronous cleanup, use {@link deferAsync} with `await using` instead.
 *
 * @param callback - The cleanup function to run on dispose.
 * @returns A `Disposable` object that invokes `callback` when disposed.
 *
 * @example
 * const logs: string[] = [];
 *
 * function run() {
 *   using cleanup = defer(() => logs.push('cleanup'));
 *   logs.push('body');
 * }
 *
 * run();
 * console.log(logs); // ['body', 'cleanup']
 */
declare function defer(callback: () => void): Disposable;
//#endregion
export { defer };