/**
 * C++ Code Generator
 *
 * IR → C++ code generation
 */
import type { IRProgram } from '../../ir/types.js';
type MemoryMode = 'ownership' | 'gc';
export declare class CppCodegen {
    private mode;
    private sourceMap;
    private indent;
    private output;
    private currentNamespace;
    private structRegistry;
    private structCounter;
    private isAsyncContext;
    constructor(mode?: MemoryMode);
    /**
     * Sanitize identifier to avoid C++ reserved keywords
     */
    private sanitizeIdentifier;
    generate(program: IRProgram, mode: MemoryMode, sourceMap?: boolean): Map<string, string>;
    private getNamespaceName;
    private generateHeader;
    private getIncludeGuard;
    private moduleUsesAsync;
    private generateHeaderDeclaration;
    private generateHeaderFunction;
    private generateHeaderClass;
    private generateHeaderInterface;
    private generateHeaderConst;
    private generateSource;
    private generateSourceDeclaration;
    private generateSourceFunction;
    private generateSourceClass;
    private generateSourceConst;
    /**
     * Generate C++ code from AST-level function body
     */
    private generateFunctionBody;
    /**
     * Generate C++ code from AST-level statement
     */
    private generateStatement;
    /**
     * Generate C++ code from AST-level expression
     */
    private generateExpression;
    /**
     * Generate block statements (SSA-level IR)
     */
    private generateBlockStatements;
    private generateInstruction;
    private generateTerminator;
    private generateExpr;
    private generateNew;
    private generateLambda;
    private generateTypeof;
    private getTypeString;
    private generateLiteral;
    private generateCppType;
    private generatePrimitiveType;
    private generatePointerType;
    private generateParam;
    private generateCppParam;
    private emit;
    private emitSourceLocation;
    /**
     * Pre-scan declarations to discover all struct types that need to be generated.
     * This populates the struct registry before we generate the actual code.
     */
    private preScanDeclarations;
    private preScanDeclaration;
    private preScanBlock;
    private preScanExpr;
    /**
     * Get or create a struct type name for a set of fields.
     * Returns the C++ type name.
     */
    private getOrCreateStructType;
    /**
     * Generate struct definitions in header
     */
    private generateStructDefinitions;
}
export {};
//# sourceMappingURL=codegen.d.ts.map