diff --git a/CMakeLists.txt b/CMakeLists.txt
index bba7f63..a41d6ae 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -78,6 +78,7 @@
     ${CPPDAP_SRC_DIR}/protocol_types.cpp
     ${CPPDAP_SRC_DIR}/session.cpp
     ${CPPDAP_SRC_DIR}/socket.cpp
+    ${CPPDAP_SRC_DIR}/typeinfo.cpp
     ${CPPDAP_SRC_DIR}/typeof.cpp
 )
 
diff --git a/include/dap/future.h b/include/dap/future.h
index abc8abf..4b2d5f2 100644
--- a/include/dap/future.h
+++ b/include/dap/future.h
@@ -89,7 +89,7 @@
 };
 
 template <typename T>
-future<T>::future(const std::shared_ptr<State>& state) : state(state) {}
+future<T>::future(const std::shared_ptr<State>& s) : state(s) {}
 
 template <typename T>
 bool future<T>::valid() const {
diff --git a/include/dap/protocol.h b/include/dap/protocol.h
index 7364bad..c45d421 100644
--- a/include/dap/protocol.h
+++ b/include/dap/protocol.h
@@ -37,10 +37,7 @@
 
 // Response to 'attach' request. This is just an acknowledgement, so no body
 // field is required.
-struct AttachResponse : public Response {
-  AttachResponse();
-  ~AttachResponse();
-};
+struct AttachResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(AttachResponse);
 
@@ -49,10 +46,6 @@
 // specific, the arguments for this request are not part of this specification.
 struct AttachRequest : public Request {
   using Response = AttachResponse;
-
-  AttachRequest();
-  ~AttachRequest();
-
   // Optional data from the previous, restarted session.
   // The data is sent as the 'restart' attribute of the 'terminated' event.
   // The client should leave the data intact.
@@ -63,18 +56,12 @@
 DAP_DECLARE_STRUCT_TYPEINFO(AttachRequest);
 
 // Names of checksum algorithms that may be supported by a debug adapter.
-struct ChecksumAlgorithm {
-  ChecksumAlgorithm();
-  ~ChecksumAlgorithm();
-};
+struct ChecksumAlgorithm {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(ChecksumAlgorithm);
 
 // The checksum of an item calculated by the specified algorithm.
 struct Checksum {
-  Checksum();
-  ~Checksum();
-
   // The algorithm used to calculate this checksum.
   ChecksumAlgorithm algorithm;
   // Value of the checksum.
@@ -87,9 +74,6 @@
 // It is returned from the debug adapter as part of a StackFrame and it is used
 // by clients when specifying breakpoints.
 struct Source {
-  Source();
-  ~Source();
-
   // Optional data that a debug adapter might want to loop through the client.
   // The client should leave the data intact and persist it across sessions. The
   // client should not interpret the data.
@@ -130,9 +114,6 @@
 // Information about a Breakpoint created in setBreakpoints,
 // setFunctionBreakpoints, setInstructionBreakpoints, or setDataBreakpoints.
 struct Breakpoint {
-  Breakpoint();
-  ~Breakpoint();
-
   // An optional start column of the actual range covered by the breakpoint.
   optional<integer> column;
   // An optional end column of the actual range covered by the breakpoint.
@@ -166,9 +147,6 @@
 
 // The event indicates that some information about a breakpoint has changed.
 struct BreakpointEvent : public Event {
-  BreakpointEvent();
-  ~BreakpointEvent();
-
   // The 'id' attribute is used to find the target breakpoint and the other
   // attributes are used as the new values.
   Breakpoint breakpoint;
@@ -184,9 +162,6 @@
 // Properties of a breakpoint location returned from the 'breakpointLocations'
 // request.
 struct BreakpointLocation {
-  BreakpointLocation();
-  ~BreakpointLocation();
-
   // Optional start column of breakpoint location.
   optional<integer> column;
   // Optional end column of breakpoint location if the location covers a range.
@@ -202,9 +177,6 @@
 // Response to 'breakpointLocations' request.
 // Contains possible locations for source breakpoints.
 struct BreakpointLocationsResponse : public Response {
-  BreakpointLocationsResponse();
-  ~BreakpointLocationsResponse();
-
   // Sorted set of possible breakpoint locations.
   array<BreakpointLocation> breakpoints;
 };
@@ -216,10 +188,6 @@
 // capability 'supportsBreakpointLocationsRequest' is true.
 struct BreakpointLocationsRequest : public Request {
   using Response = BreakpointLocationsResponse;
-
-  BreakpointLocationsRequest();
-  ~BreakpointLocationsRequest();
-
   // Optional start column of range to search possible breakpoint locations in.
   // If no start column is given, the first column in the start line is assumed.
   optional<integer> column;
@@ -242,10 +210,7 @@
 
 // Response to 'cancel' request. This is just an acknowledgement, so no body
 // field is required.
-struct CancelResponse : public Response {
-  CancelResponse();
-  ~CancelResponse();
-};
+struct CancelResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(CancelResponse);
 
@@ -270,10 +235,6 @@
 //  sending the 'cancel' request.
 struct CancelRequest : public Request {
   using Response = CancelResponse;
-
-  CancelRequest();
-  ~CancelRequest();
-
   // The ID (attribute 'progressId') of the progress to cancel. If missing no
   // progress is cancelled. Both a 'requestId' and a 'progressId' can be
   // specified in one request.
@@ -290,9 +251,6 @@
 // ModulesView, how to format it, and what the column's label should be. It is
 // only used if the underlying UI actually supports this level of customization.
 struct ColumnDescriptor {
-  ColumnDescriptor();
-  ~ColumnDescriptor();
-
   // Name of the attribute rendered in this column.
   string attributeName;
   // Format to use for the rendered values in this column. TBD how the format
@@ -314,9 +272,6 @@
 // An ExceptionBreakpointsFilter is shown in the UI as an option for configuring
 // how exceptions are dealt with.
 struct ExceptionBreakpointsFilter {
-  ExceptionBreakpointsFilter();
-  ~ExceptionBreakpointsFilter();
-
   // Initial value of the filter. If not specified a value 'false' is assumed.
   optional<boolean> def;
   // The internal ID of the filter. This value is passed to the
@@ -330,9 +285,6 @@
 
 // Information about the capabilities of a debug adapter.
 struct Capabilities {
-  Capabilities();
-  ~Capabilities();
-
   // The set of additional module information exposed by the debug adapter.
   optional<array<ColumnDescriptor>> additionalModuleColumns;
   // The set of characters that should trigger completion in a REPL. If not
@@ -430,9 +382,6 @@
 // guarantees. Only changed capabilities need to be included, all other
 // capabilities keep their values.
 struct CapabilitiesEvent : public Event {
-  CapabilitiesEvent();
-  ~CapabilitiesEvent();
-
   // The set of updated capabilities.
   Capabilities capabilities;
 };
@@ -441,18 +390,12 @@
 
 // Some predefined types for the CompletionItem. Please note that not all
 // clients have specific icons for all of them.
-struct CompletionItemType {
-  CompletionItemType();
-  ~CompletionItemType();
-};
+struct CompletionItemType {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(CompletionItemType);
 
 // CompletionItems are the suggestions returned from the CompletionsRequest.
 struct CompletionItem {
-  CompletionItem();
-  ~CompletionItem();
-
   // The label of this completion item. By default this is also the text that is
   // inserted when selecting this completion.
   string label;
@@ -487,9 +430,6 @@
 
 // Response to 'completions' request.
 struct CompletionsResponse : public Response {
-  CompletionsResponse();
-  ~CompletionsResponse();
-
   // The possible completions for .
   array<CompletionItem> targets;
 };
@@ -501,10 +441,6 @@
 // 'supportsCompletionsRequest' is true.
 struct CompletionsRequest : public Request {
   using Response = CompletionsResponse;
-
-  CompletionsRequest();
-  ~CompletionsRequest();
-
   // The character position for which to determine the completion proposals.
   integer column;
   // Returns completions in the scope of this stack frame. If not specified, the
@@ -522,10 +458,7 @@
 
 // Response to 'configurationDone' request. This is just an acknowledgement, so
 // no body field is required.
-struct ConfigurationDoneResponse : public Response {
-  ConfigurationDoneResponse();
-  ~ConfigurationDoneResponse();
-};
+struct ConfigurationDoneResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(ConfigurationDoneResponse);
 
@@ -536,18 +469,12 @@
 // 'supportsConfigurationDoneRequest' is true.
 struct ConfigurationDoneRequest : public Request {
   using Response = ConfigurationDoneResponse;
-
-  ConfigurationDoneRequest();
-  ~ConfigurationDoneRequest();
 };
 
 DAP_DECLARE_STRUCT_TYPEINFO(ConfigurationDoneRequest);
 
 // Response to 'continue' request.
 struct ContinueResponse : public Response {
-  ContinueResponse();
-  ~ContinueResponse();
-
   // If true, the 'continue' request has ignored the specified thread and
   // continued all threads instead. If this attribute is missing a value of
   // 'true' is assumed for backward compatibility.
@@ -559,10 +486,6 @@
 // The request starts the debuggee to run again.
 struct ContinueRequest : public Request {
   using Response = ContinueResponse;
-
-  ContinueRequest();
-  ~ContinueRequest();
-
   // Continue execution for the specified thread (if possible).
   // If the backend cannot continue on a single thread but will continue on all
   // threads, it should set the 'allThreadsContinued' attribute in the response
@@ -578,9 +501,6 @@
 // 'continue'. It is only necessary to send a 'continued' event if there was no
 // previous request that implied this.
 struct ContinuedEvent : public Event {
-  ContinuedEvent();
-  ~ContinuedEvent();
-
   // If 'allThreadsContinued' is true, a debug adapter can announce that all
   // threads have continued.
   optional<boolean> allThreadsContinued;
@@ -591,18 +511,12 @@
 DAP_DECLARE_STRUCT_TYPEINFO(ContinuedEvent);
 
 // This enumeration defines all possible access types for data breakpoints.
-struct DataBreakpointAccessType {
-  DataBreakpointAccessType();
-  ~DataBreakpointAccessType();
-};
+struct DataBreakpointAccessType {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(DataBreakpointAccessType);
 
 // Response to 'dataBreakpointInfo' request.
 struct DataBreakpointInfoResponse : public Response {
-  DataBreakpointInfoResponse();
-  ~DataBreakpointInfoResponse();
-
   // Optional attribute listing the available access types for a potential data
   // breakpoint. A UI frontend could surface this information.
   optional<array<DataBreakpointAccessType>> accessTypes;
@@ -625,10 +539,6 @@
 // capability 'supportsDataBreakpoints' is true.
 struct DataBreakpointInfoRequest : public Request {
   using Response = DataBreakpointInfoResponse;
-
-  DataBreakpointInfoRequest();
-  ~DataBreakpointInfoRequest();
-
   // The name of the Variable's child to obtain data breakpoint information for.
   // If variableReference isn’t provided, this can be an expression.
   string name;
@@ -641,9 +551,6 @@
 
 // Represents a single disassembled instruction.
 struct DisassembledInstruction {
-  DisassembledInstruction();
-  ~DisassembledInstruction();
-
   // The address of the instruction. Treated as a hex value if prefixed with
   // '0x', or as a decimal value otherwise.
   string address;
@@ -676,9 +583,6 @@
 
 // Response to 'disassemble' request.
 struct DisassembleResponse : public Response {
-  DisassembleResponse();
-  ~DisassembleResponse();
-
   // The list of disassembled instructions.
   array<DisassembledInstruction> instructions;
 };
@@ -690,10 +594,6 @@
 // 'supportsDisassembleRequest' is true.
 struct DisassembleRequest : public Request {
   using Response = DisassembleResponse;
-
-  DisassembleRequest();
-  ~DisassembleRequest();
-
   // Number of instructions to disassemble starting at the specified location
   // and offset. An adapter must return exactly this number of instructions -
   // any unavailable instructions should be replaced with an
@@ -717,10 +617,7 @@
 
 // Response to 'disconnect' request. This is just an acknowledgement, so no body
 // field is required.
-struct DisconnectResponse : public Response {
-  DisconnectResponse();
-  ~DisconnectResponse();
-};
+struct DisconnectResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(DisconnectResponse);
 
@@ -733,10 +630,6 @@
 // 'terminateDebuggee' argument (if supported by the debug adapter).
 struct DisconnectRequest : public Request {
   using Response = DisconnectResponse;
-
-  DisconnectRequest();
-  ~DisconnectRequest();
-
   // A value of true indicates that this 'disconnect' request is part of a
   // restart sequence.
   optional<boolean> restart;
@@ -751,9 +644,6 @@
 
 // A structured message object. Used to return errors from requests.
 struct Message {
-  Message();
-  ~Message();
-
   // A format string for the message. Embedded variables have the form '{name}'.
   // If variable name starts with an underscore character, the variable does not
   // contain user data (PII) and can be safely used for telemetry purposes.
@@ -779,9 +669,6 @@
 
 // On error (whenever 'success' is false), the body can provide more details.
 struct ErrorResponse : public Response {
-  ErrorResponse();
-  ~ErrorResponse();
-
   // An optional, structured error message.
   optional<Message> error;
 };
@@ -791,9 +678,6 @@
 // Optional properties of a variable that can be used to determine how to render
 // the variable in the UI.
 struct VariablePresentationHint {
-  VariablePresentationHint();
-  ~VariablePresentationHint();
-
   // Set of attributes represented as an array of strings. Before introducing
   // additional values, try to use the listed values.
   optional<array<string>> attributes;
@@ -816,9 +700,6 @@
 
 // Response to 'evaluate' request.
 struct EvaluateResponse : public Response {
-  EvaluateResponse();
-  ~EvaluateResponse();
-
   // The number of indexed child variables.
   // The client can use this optional information to present the variables in a
   // paged UI and fetch them in chunks. The value should be less than or equal
@@ -856,9 +737,6 @@
 
 // Provides formatting information for a value.
 struct ValueFormat {
-  ValueFormat();
-  ~ValueFormat();
-
   // Display the value in hex.
   optional<boolean> hex;
 };
@@ -869,10 +747,6 @@
 // The expression has access to any variables and arguments that are in scope.
 struct EvaluateRequest : public Request {
   using Response = EvaluateResponse;
-
-  EvaluateRequest();
-  ~EvaluateRequest();
-
   // The context in which the evaluate request is run.
   //
   // May be one of the following enumeration values:
@@ -895,18 +769,12 @@
 // should result in a break. never: never breaks, always: always breaks,
 // unhandled: breaks when exception unhandled,
 // userUnhandled: breaks if the exception is not handled by user code.
-struct ExceptionBreakMode {
-  ExceptionBreakMode();
-  ~ExceptionBreakMode();
-};
+struct ExceptionBreakMode {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(ExceptionBreakMode);
 
 // Detailed information about an exception that has occurred.
 struct ExceptionDetails {
-  ExceptionDetails();
-  ~ExceptionDetails();
-
   // Optional expression that can be evaluated in the current scope to obtain
   // the exception object.
   optional<string> evaluateName;
@@ -926,9 +794,6 @@
 
 // Response to 'exceptionInfo' request.
 struct ExceptionInfoResponse : public Response {
-  ExceptionInfoResponse();
-  ~ExceptionInfoResponse();
-
   // Mode that caused the exception notification to be raised.
   ExceptionBreakMode breakMode;
   // Descriptive text for the exception provided by the debug adapter.
@@ -946,10 +811,6 @@
 // 'supportsExceptionInfoRequest' is true.
 struct ExceptionInfoRequest : public Request {
   using Response = ExceptionInfoResponse;
-
-  ExceptionInfoRequest();
-  ~ExceptionInfoRequest();
-
   // Thread for which exception information should be retrieved.
   integer threadId;
 };
@@ -958,9 +819,6 @@
 
 // The event indicates that the debuggee has exited and returns its exit code.
 struct ExitedEvent : public Event {
-  ExitedEvent();
-  ~ExitedEvent();
-
   // The exit code returned from the debuggee.
   integer exitCode;
 };
@@ -969,10 +827,7 @@
 
 // Response to 'goto' request. This is just an acknowledgement, so no body field
 // is required.
-struct GotoResponse : public Response {
-  GotoResponse();
-  ~GotoResponse();
-};
+struct GotoResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(GotoResponse);
 
@@ -985,10 +840,6 @@
 // targets exist that can be passed as arguments).
 struct GotoRequest : public Request {
   using Response = GotoResponse;
-
-  GotoRequest();
-  ~GotoRequest();
-
   // The location where the debuggee will continue to run.
   integer targetId;
   // Set the goto target for this thread.
@@ -1001,9 +852,6 @@
 // 'goto' request. The possible goto targets can be determined via the
 // 'gotoTargets' request.
 struct GotoTarget {
-  GotoTarget();
-  ~GotoTarget();
-
   // An optional column of the goto target.
   optional<integer> column;
   // An optional end column of the range covered by the goto target.
@@ -1025,9 +873,6 @@
 
 // Response to 'gotoTargets' request.
 struct GotoTargetsResponse : public Response {
-  GotoTargetsResponse();
-  ~GotoTargetsResponse();
-
   // The possible goto targets of the specified location.
   array<GotoTarget> targets;
 };
@@ -1040,10 +885,6 @@
 // true.
 struct GotoTargetsRequest : public Request {
   using Response = GotoTargetsResponse;
-
-  GotoTargetsRequest();
-  ~GotoTargetsRequest();
-
   // An optional column location for which the goto targets are determined.
   optional<integer> column;
   // The line location for which the goto targets are determined.
@@ -1056,9 +897,6 @@
 
 // Response to 'initialize' request.
 struct InitializeResponse : public Response {
-  InitializeResponse();
-  ~InitializeResponse();
-
   // The set of additional module information exposed by the debug adapter.
   optional<array<ColumnDescriptor>> additionalModuleColumns;
   // The set of characters that should trigger completion in a REPL. If not
@@ -1158,10 +996,6 @@
 // only be sent once.
 struct InitializeRequest : public Request {
   using Response = InitializeResponse;
-
-  InitializeRequest();
-  ~InitializeRequest();
-
   // The ID of the debug adapter.
   string adapterID;
   // The ID of the (frontend) client using this adapter.
@@ -1211,19 +1045,13 @@
 // - frontend sends other future configuration requests
 // - frontend sends one 'configurationDone' request to indicate the end of the
 // configuration.
-struct InitializedEvent : public Event {
-  InitializedEvent();
-  ~InitializedEvent();
-};
+struct InitializedEvent : public Event {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(InitializedEvent);
 
 // Response to 'launch' request. This is just an acknowledgement, so no body
 // field is required.
-struct LaunchResponse : public Response {
-  LaunchResponse();
-  ~LaunchResponse();
-};
+struct LaunchResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(LaunchResponse);
 
@@ -1233,10 +1061,6 @@
 // this specification.
 struct LaunchRequest : public Request {
   using Response = LaunchResponse;
-
-  LaunchRequest();
-  ~LaunchRequest();
-
   // Optional data from the previous, restarted session.
   // The data is sent as the 'restart' attribute of the 'terminated' event.
   // The client should leave the data intact.
@@ -1252,9 +1076,6 @@
 // The event indicates that some source has been added, changed, or removed from
 // the set of all loaded sources.
 struct LoadedSourceEvent : public Event {
-  LoadedSourceEvent();
-  ~LoadedSourceEvent();
-
   // The reason for the event.
   //
   // Must be one of the following enumeration values:
@@ -1268,9 +1089,6 @@
 
 // Response to 'loadedSources' request.
 struct LoadedSourcesResponse : public Response {
-  LoadedSourcesResponse();
-  ~LoadedSourcesResponse();
-
   // Set of loaded sources.
   array<Source> sources;
 };
@@ -1282,9 +1100,6 @@
 // 'supportsLoadedSourcesRequest' is true.
 struct LoadedSourcesRequest : public Request {
   using Response = LoadedSourcesResponse;
-
-  LoadedSourcesRequest();
-  ~LoadedSourcesRequest();
 };
 
 DAP_DECLARE_STRUCT_TYPEINFO(LoadedSourcesRequest);
@@ -1302,9 +1117,6 @@
 // 'recommended' list below first, and only introduce new attributes if nothing
 // appropriate could be found.
 struct Module {
-  Module();
-  ~Module();
-
   // Address range covered by this module.
   optional<string> addressRange;
   // Module created or modified.
@@ -1339,9 +1151,6 @@
 
 // The event indicates that some information about a module has changed.
 struct ModuleEvent : public Event {
-  ModuleEvent();
-  ~ModuleEvent();
-
   // The new, changed, or removed module. In case of 'removed' only the module
   // id is used.
   Module module;
@@ -1356,9 +1165,6 @@
 
 // Response to 'modules' request.
 struct ModulesResponse : public Response {
-  ModulesResponse();
-  ~ModulesResponse();
-
   // All modules or range of modules.
   array<Module> modules;
   // The total number of modules available.
@@ -1373,10 +1179,6 @@
 // true.
 struct ModulesRequest : public Request {
   using Response = ModulesResponse;
-
-  ModulesRequest();
-  ~ModulesRequest();
-
   // The number of modules to return. If moduleCount is not specified or 0, all
   // modules are returned.
   optional<integer> moduleCount;
@@ -1388,19 +1190,13 @@
 
 // Response to 'next' request. This is just an acknowledgement, so no body field
 // is required.
-struct NextResponse : public Response {
-  NextResponse();
-  ~NextResponse();
-};
+struct NextResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(NextResponse);
 
 // The granularity of one 'step' in the stepping requests 'next', 'stepIn',
 // 'stepOut', and 'stepBack'.
-struct SteppingGranularity {
-  SteppingGranularity();
-  ~SteppingGranularity();
-};
+struct SteppingGranularity {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(SteppingGranularity);
 
@@ -1409,10 +1205,6 @@
 // reason 'step') after the step has completed.
 struct NextRequest : public Request {
   using Response = NextResponse;
-
-  NextRequest();
-  ~NextRequest();
-
   // Optional granularity to step. If no granularity is specified, a granularity
   // of 'statement' is assumed.
   optional<SteppingGranularity> granularity;
@@ -1424,9 +1216,6 @@
 
 // The event indicates that the target has produced some output.
 struct OutputEvent : public Event {
-  OutputEvent();
-  ~OutputEvent();
-
   // The output category. If not specified, 'console' is assumed.
   //
   // May be one of the following enumeration values:
@@ -1460,10 +1249,7 @@
 
 // Response to 'pause' request. This is just an acknowledgement, so no body
 // field is required.
-struct PauseResponse : public Response {
-  PauseResponse();
-  ~PauseResponse();
-};
+struct PauseResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(PauseResponse);
 
@@ -1472,10 +1258,6 @@
 // reason 'pause') after the thread has been paused successfully.
 struct PauseRequest : public Request {
   using Response = PauseResponse;
-
-  PauseRequest();
-  ~PauseRequest();
-
   // Pause execution for this thread.
   integer threadId;
 };
@@ -1485,9 +1267,6 @@
 // The event indicates that the debugger has begun debugging a new process.
 // Either one that it has launched, or one that it has attached to.
 struct ProcessEvent : public Event {
-  ProcessEvent();
-  ~ProcessEvent();
-
   // If true, the process is running on the same computer as the debug adapter.
   optional<boolean> isLocalProcess;
   // The logical name of the process. This is usually the full path to process's
@@ -1513,9 +1292,6 @@
 // true for the 'supportsProgressReporting' capability of the 'initialize'
 // request.
 struct ProgressEndEvent : public Event {
-  ProgressEndEvent();
-  ~ProgressEndEvent();
-
   // Optional, more detailed progress message. If omitted, the previous message
   // (if any) is used.
   optional<string> message;
@@ -1532,9 +1308,6 @@
 // has passed the value true for the 'supportsProgressReporting' capability of
 // the 'initialize' request.
 struct ProgressStartEvent : public Event {
-  ProgressStartEvent();
-  ~ProgressStartEvent();
-
   // If true, the request that reports progress may be canceled with a 'cancel'
   // request. So this property basically controls whether the client should use
   // UX that supports cancellation. Clients that don't support cancellation are
@@ -1569,9 +1342,6 @@
 // the value true for the 'supportsProgressReporting' capability of the
 // 'initialize' request.
 struct ProgressUpdateEvent : public Event {
-  ProgressUpdateEvent();
-  ~ProgressUpdateEvent();
-
   // Optional, more detailed progress message. If omitted, the previous message
   // (if any) is used.
   optional<string> message;
@@ -1586,9 +1356,6 @@
 
 // Response to 'readMemory' request.
 struct ReadMemoryResponse : public Response {
-  ReadMemoryResponse();
-  ~ReadMemoryResponse();
-
   // The address of the first byte of data returned.
   // Treated as a hex value if prefixed with '0x', or as a decimal value
   // otherwise.
@@ -1608,10 +1375,6 @@
 // 'supportsReadMemoryRequest' is true.
 struct ReadMemoryRequest : public Request {
   using Response = ReadMemoryResponse;
-
-  ReadMemoryRequest();
-  ~ReadMemoryRequest();
-
   // Number of bytes to read at the specified location and offset.
   integer count;
   // Memory reference to the base location from which data should be read.
@@ -1625,10 +1388,7 @@
 
 // Response to 'restartFrame' request. This is just an acknowledgement, so no
 // body field is required.
-struct RestartFrameResponse : public Response {
-  RestartFrameResponse();
-  ~RestartFrameResponse();
-};
+struct RestartFrameResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(RestartFrameResponse);
 
@@ -1638,10 +1398,6 @@
 // this request if the capability 'supportsRestartFrame' is true.
 struct RestartFrameRequest : public Request {
   using Response = RestartFrameResponse;
-
-  RestartFrameRequest();
-  ~RestartFrameRequest();
-
   // Restart this stackframe.
   integer frameId;
 };
@@ -1650,10 +1406,7 @@
 
 // Response to 'restart' request. This is just an acknowledgement, so no body
 // field is required.
-struct RestartResponse : public Response {
-  RestartResponse();
-  ~RestartResponse();
-};
+struct RestartResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(RestartResponse);
 
@@ -1663,19 +1416,13 @@
 // the debug adapter first and then launching it anew.
 struct RestartRequest : public Request {
   using Response = RestartResponse;
-
-  RestartRequest();
-  ~RestartRequest();
 };
 
 DAP_DECLARE_STRUCT_TYPEINFO(RestartRequest);
 
 // Response to 'reverseContinue' request. This is just an acknowledgement, so no
 // body field is required.
-struct ReverseContinueResponse : public Response {
-  ReverseContinueResponse();
-  ~ReverseContinueResponse();
-};
+struct ReverseContinueResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(ReverseContinueResponse);
 
@@ -1684,10 +1431,6 @@
 // true.
 struct ReverseContinueRequest : public Request {
   using Response = ReverseContinueResponse;
-
-  ReverseContinueRequest();
-  ~ReverseContinueRequest();
-
   // Execute 'reverseContinue' for this thread.
   integer threadId;
 };
@@ -1696,9 +1439,6 @@
 
 // Response to 'runInTerminal' request.
 struct RunInTerminalResponse : public Response {
-  RunInTerminalResponse();
-  ~RunInTerminalResponse();
-
   // The process ID. The value should be less than or equal to 2147483647 (2^31
   // - 1).
   optional<integer> processId;
@@ -1716,10 +1456,6 @@
 // capability of the 'initialize' request.
 struct RunInTerminalRequest : public Request {
   using Response = RunInTerminalResponse;
-
-  RunInTerminalRequest();
-  ~RunInTerminalRequest();
-
   // List of arguments. The first argument is the command to run.
   array<string> args;
   // Working directory of the command.
@@ -1741,9 +1477,6 @@
 // A Scope is a named container for variables. Optionally a scope can map to a
 // source or a range within a source.
 struct Scope {
-  Scope();
-  ~Scope();
-
   // Optional start column of the range covered by this scope.
   optional<integer> column;
   // Optional end column of the range covered by this scope.
@@ -1783,9 +1516,6 @@
 
 // Response to 'scopes' request.
 struct ScopesResponse : public Response {
-  ScopesResponse();
-  ~ScopesResponse();
-
   // The scopes of the stackframe. If the array has length zero, there are no
   // scopes available.
   array<Scope> scopes;
@@ -1796,10 +1526,6 @@
 // The request returns the variable scopes for a given stackframe ID.
 struct ScopesRequest : public Request {
   using Response = ScopesResponse;
-
-  ScopesRequest();
-  ~ScopesRequest();
-
   // Retrieve the scopes for this stackframe.
   integer frameId;
 };
@@ -1812,9 +1538,6 @@
 // verified. The breakpoints returned are in the same order as the elements of
 // the 'breakpoints' (or the deprecated 'lines') array in the arguments.
 struct SetBreakpointsResponse : public Response {
-  SetBreakpointsResponse();
-  ~SetBreakpointsResponse();
-
   // Information about the breakpoints.
   // The array elements are in the same order as the elements of the
   // 'breakpoints' (or the deprecated 'lines') array in the arguments.
@@ -1825,9 +1548,6 @@
 
 // Properties of a breakpoint or logpoint passed to the setBreakpoints request.
 struct SourceBreakpoint {
-  SourceBreakpoint();
-  ~SourceBreakpoint();
-
   // An optional source column of the breakpoint.
   optional<integer> column;
   // An optional expression for conditional breakpoints.
@@ -1856,10 +1576,6 @@
 // 'breakpoint') is generated.
 struct SetBreakpointsRequest : public Request {
   using Response = SetBreakpointsResponse;
-
-  SetBreakpointsRequest();
-  ~SetBreakpointsRequest();
-
   // The code locations of the breakpoints.
   optional<array<SourceBreakpoint>> breakpoints;
   // Deprecated: The code locations of the breakpoints.
@@ -1877,9 +1593,6 @@
 // Response to 'setDataBreakpoints' request.
 // Returned is information about each breakpoint created by this request.
 struct SetDataBreakpointsResponse : public Response {
-  SetDataBreakpointsResponse();
-  ~SetDataBreakpointsResponse();
-
   // Information about the data breakpoints. The array elements correspond to
   // the elements of the input argument 'breakpoints' array.
   array<Breakpoint> breakpoints;
@@ -1889,9 +1602,6 @@
 
 // Properties of a data breakpoint passed to the setDataBreakpoints request.
 struct DataBreakpoint {
-  DataBreakpoint();
-  ~DataBreakpoint();
-
   // The access type of the data.
   optional<DataBreakpointAccessType> accessType;
   // An optional expression for conditional breakpoints.
@@ -1913,10 +1623,6 @@
 // capability 'supportsDataBreakpoints' is true.
 struct SetDataBreakpointsRequest : public Request {
   using Response = SetDataBreakpointsResponse;
-
-  SetDataBreakpointsRequest();
-  ~SetDataBreakpointsRequest();
-
   // The contents of this array replaces all existing data breakpoints. An empty
   // array clears all data breakpoints.
   array<DataBreakpoint> breakpoints;
@@ -1926,10 +1632,7 @@
 
 // Response to 'setExceptionBreakpoints' request. This is just an
 // acknowledgement, so no body field is required.
-struct SetExceptionBreakpointsResponse : public Response {
-  SetExceptionBreakpointsResponse();
-  ~SetExceptionBreakpointsResponse();
-};
+struct SetExceptionBreakpointsResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(SetExceptionBreakpointsResponse);
 
@@ -1938,9 +1641,6 @@
 // one name, it matches the names provided if 'negate' is false or missing or it
 // matches anything except the names provided if 'negate' is true.
 struct ExceptionPathSegment {
-  ExceptionPathSegment();
-  ~ExceptionPathSegment();
-
   // Depending on the value of 'negate' the names that should match or not
   // match.
   array<string> names;
@@ -1953,9 +1653,6 @@
 
 // An ExceptionOptions assigns configuration options to a set of exceptions.
 struct ExceptionOptions {
-  ExceptionOptions();
-  ~ExceptionOptions();
-
   // Condition when a thrown exception should result in a break.
   ExceptionBreakMode breakMode;
   // A path that selects a single or multiple exceptions in a tree. If 'path' is
@@ -1972,10 +1669,6 @@
 // 'exceptionBreakpointFilters' returns one or more filters.
 struct SetExceptionBreakpointsRequest : public Request {
   using Response = SetExceptionBreakpointsResponse;
-
-  SetExceptionBreakpointsRequest();
-  ~SetExceptionBreakpointsRequest();
-
   // Configuration options for selected exceptions.
   // The attribute is only honored by a debug adapter if the capability
   // 'supportsExceptionOptions' is true.
@@ -1989,9 +1682,6 @@
 
 // Response to 'setExpression' request.
 struct SetExpressionResponse : public Response {
-  SetExpressionResponse();
-  ~SetExpressionResponse();
-
   // The number of indexed child variables.
   // The client can use this optional information to present the variables in a
   // paged UI and fetch them in chunks. The value should be less than or equal
@@ -2027,10 +1717,6 @@
 // true.
 struct SetExpressionRequest : public Request {
   using Response = SetExpressionResponse;
-
-  SetExpressionRequest();
-  ~SetExpressionRequest();
-
   // The l-value expression to assign to.
   string expression;
   // Specifies how the resulting value should be formatted.
@@ -2047,9 +1733,6 @@
 // Response to 'setFunctionBreakpoints' request.
 // Returned is information about each breakpoint created by this request.
 struct SetFunctionBreakpointsResponse : public Response {
-  SetFunctionBreakpointsResponse();
-  ~SetFunctionBreakpointsResponse();
-
   // Information about the breakpoints. The array elements correspond to the
   // elements of the 'breakpoints' array.
   array<Breakpoint> breakpoints;
@@ -2059,9 +1742,6 @@
 
 // Properties of a breakpoint passed to the setFunctionBreakpoints request.
 struct FunctionBreakpoint {
-  FunctionBreakpoint();
-  ~FunctionBreakpoint();
-
   // An optional expression for conditional breakpoints.
   // It is only honored by a debug adapter if the capability
   // 'supportsConditionalBreakpoints' is true.
@@ -2084,10 +1764,6 @@
 // capability 'supportsFunctionBreakpoints' is true.
 struct SetFunctionBreakpointsRequest : public Request {
   using Response = SetFunctionBreakpointsResponse;
-
-  SetFunctionBreakpointsRequest();
-  ~SetFunctionBreakpointsRequest();
-
   // The function names of the breakpoints.
   array<FunctionBreakpoint> breakpoints;
 };
@@ -2096,9 +1772,6 @@
 
 // Response to 'setInstructionBreakpoints' request
 struct SetInstructionBreakpointsResponse : public Response {
-  SetInstructionBreakpointsResponse();
-  ~SetInstructionBreakpointsResponse();
-
   // Information about the breakpoints. The array elements correspond to the
   // elements of the 'breakpoints' array.
   array<Breakpoint> breakpoints;
@@ -2108,9 +1781,6 @@
 
 // Properties of a breakpoint passed to the setInstructionBreakpoints request
 struct InstructionBreakpoint {
-  InstructionBreakpoint();
-  ~InstructionBreakpoint();
-
   // An optional expression for conditional breakpoints.
   // It is only honored by a debug adapter if the capability
   // 'supportsConditionalBreakpoints' is true.
@@ -2139,10 +1809,6 @@
 // 'supportsInstructionBreakpoints' is true.
 struct SetInstructionBreakpointsRequest : public Request {
   using Response = SetInstructionBreakpointsResponse;
-
-  SetInstructionBreakpointsRequest();
-  ~SetInstructionBreakpointsRequest();
-
   // The instruction references of the breakpoints
   array<InstructionBreakpoint> breakpoints;
 };
@@ -2151,9 +1817,6 @@
 
 // Response to 'setVariable' request.
 struct SetVariableResponse : public Response {
-  SetVariableResponse();
-  ~SetVariableResponse();
-
   // The number of indexed child variables.
   // The client can use this optional information to present the variables in a
   // paged UI and fetch them in chunks. The value should be less than or equal
@@ -2182,10 +1845,6 @@
 // 'supportsSetVariable' is true.
 struct SetVariableRequest : public Request {
   using Response = SetVariableResponse;
-
-  SetVariableRequest();
-  ~SetVariableRequest();
-
   // Specifies details on how to format the response value.
   optional<ValueFormat> format;
   // The name of the variable in the container.
@@ -2200,9 +1859,6 @@
 
 // Response to 'source' request.
 struct SourceResponse : public Response {
-  SourceResponse();
-  ~SourceResponse();
-
   // Content of the source reference.
   string content;
   // Optional content type (mime type) of the source.
@@ -2214,10 +1870,6 @@
 // The request retrieves the source code for a given source reference.
 struct SourceRequest : public Request {
   using Response = SourceResponse;
-
-  SourceRequest();
-  ~SourceRequest();
-
   // Specifies the source content to load. Either source.path or
   // source.sourceReference must be specified.
   optional<Source> source;
@@ -2231,9 +1883,6 @@
 
 // A Stackframe contains the source location.
 struct StackFrame {
-  StackFrame();
-  ~StackFrame();
-
   // The column within the line. If source is null or doesn't exist, column is 0
   // and must be ignored.
   integer column;
@@ -2271,9 +1920,6 @@
 
 // Response to 'stackTrace' request.
 struct StackTraceResponse : public Response {
-  StackTraceResponse();
-  ~StackTraceResponse();
-
   // The frames of the stackframe. If the array has length zero, there are no
   // stackframes available. This means that there is no location information
   // available.
@@ -2286,9 +1932,6 @@
 
 // Provides formatting information for a stack frame.
 struct StackFrameFormat : public ValueFormat {
-  StackFrameFormat();
-  ~StackFrameFormat();
-
   // Includes all stack frames, including those the debug adapter might
   // otherwise hide.
   optional<boolean> includeAll;
@@ -2311,10 +1954,6 @@
 // The request returns a stacktrace from the current execution state.
 struct StackTraceRequest : public Request {
   using Response = StackTraceResponse;
-
-  StackTraceRequest();
-  ~StackTraceRequest();
-
   // Specifies details on how to format the stack frames.
   // The attribute is only honored by a debug adapter if the capability
   // 'supportsValueFormattingOptions' is true.
@@ -2332,10 +1971,7 @@
 
 // Response to 'stepBack' request. This is just an acknowledgement, so no body
 // field is required.
-struct StepBackResponse : public Response {
-  StepBackResponse();
-  ~StepBackResponse();
-};
+struct StepBackResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(StepBackResponse);
 
@@ -2345,10 +1981,6 @@
 // request if the capability 'supportsStepBack' is true.
 struct StepBackRequest : public Request {
   using Response = StepBackResponse;
-
-  StepBackRequest();
-  ~StepBackRequest();
-
   // Optional granularity to step. If no granularity is specified, a granularity
   // of 'statement' is assumed.
   optional<SteppingGranularity> granularity;
@@ -2360,10 +1992,7 @@
 
 // Response to 'stepIn' request. This is just an acknowledgement, so no body
 // field is required.
-struct StepInResponse : public Response {
-  StepInResponse();
-  ~StepInResponse();
-};
+struct StepInResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(StepInResponse);
 
@@ -2377,10 +2006,6 @@
 // retrieved via the 'stepInTargets' request.
 struct StepInRequest : public Request {
   using Response = StepInResponse;
-
-  StepInRequest();
-  ~StepInRequest();
-
   // Optional granularity to step. If no granularity is specified, a granularity
   // of 'statement' is assumed.
   optional<SteppingGranularity> granularity;
@@ -2395,9 +2020,6 @@
 // A StepInTarget can be used in the 'stepIn' request and determines into which
 // single target the stepIn request should step.
 struct StepInTarget {
-  StepInTarget();
-  ~StepInTarget();
-
   // Unique identifier for a stepIn target.
   integer id;
   // The name of the stepIn target (shown in the UI).
@@ -2408,9 +2030,6 @@
 
 // Response to 'stepInTargets' request.
 struct StepInTargetsResponse : public Response {
-  StepInTargetsResponse();
-  ~StepInTargetsResponse();
-
   // The possible stepIn targets of the specified source location.
   array<StepInTarget> targets;
 };
@@ -2424,10 +2043,6 @@
 // 'supportsStepInTargetsRequest' is true.
 struct StepInTargetsRequest : public Request {
   using Response = StepInTargetsResponse;
-
-  StepInTargetsRequest();
-  ~StepInTargetsRequest();
-
   // The stack frame for which to retrieve the possible stepIn targets.
   integer frameId;
 };
@@ -2436,10 +2051,7 @@
 
 // Response to 'stepOut' request. This is just an acknowledgement, so no body
 // field is required.
-struct StepOutResponse : public Response {
-  StepOutResponse();
-  ~StepOutResponse();
-};
+struct StepOutResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(StepOutResponse);
 
@@ -2448,10 +2060,6 @@
 // reason 'step') after the step has completed.
 struct StepOutRequest : public Request {
   using Response = StepOutResponse;
-
-  StepOutRequest();
-  ~StepOutRequest();
-
   // Optional granularity to step. If no granularity is specified, a granularity
   // of 'statement' is assumed.
   optional<SteppingGranularity> granularity;
@@ -2465,9 +2073,6 @@
 // some condition. This can be caused by a break point previously set, a
 // stepping request has completed, by executing a debugger statement etc.
 struct StoppedEvent : public Event {
-  StoppedEvent();
-  ~StoppedEvent();
-
   // If 'allThreadsStopped' is true, a debug adapter can announce that all
   // threads have stopped.
   // - The client should use this information to enable that all threads can be
@@ -2500,10 +2105,7 @@
 
 // Response to 'terminate' request. This is just an acknowledgement, so no body
 // field is required.
-struct TerminateResponse : public Response {
-  TerminateResponse();
-  ~TerminateResponse();
-};
+struct TerminateResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(TerminateResponse);
 
@@ -2512,10 +2114,6 @@
 // call this request if the capability 'supportsTerminateRequest' is true.
 struct TerminateRequest : public Request {
   using Response = TerminateResponse;
-
-  TerminateRequest();
-  ~TerminateRequest();
-
   // A value of true indicates that this 'terminate' request is part of a
   // restart sequence.
   optional<boolean> restart;
@@ -2525,10 +2123,7 @@
 
 // Response to 'terminateThreads' request. This is just an acknowledgement, so
 // no body field is required.
-struct TerminateThreadsResponse : public Response {
-  TerminateThreadsResponse();
-  ~TerminateThreadsResponse();
-};
+struct TerminateThreadsResponse : public Response {};
 
 DAP_DECLARE_STRUCT_TYPEINFO(TerminateThreadsResponse);
 
@@ -2537,10 +2132,6 @@
 // 'supportsTerminateThreadsRequest' is true.
 struct TerminateThreadsRequest : public Request {
   using Response = TerminateThreadsResponse;
-
-  TerminateThreadsRequest();
-  ~TerminateThreadsRequest();
-
   // Ids of threads to be terminated.
   optional<array<integer>> threadIds;
 };
@@ -2550,9 +2141,6 @@
 // The event indicates that debugging of the debuggee has terminated. This does
 // **not** mean that the debuggee itself has exited.
 struct TerminatedEvent : public Event {
-  TerminatedEvent();
-  ~TerminatedEvent();
-
   // A debug adapter may set 'restart' to true (or to an arbitrary object) to
   // request that the front end restarts the session. The value is not
   // interpreted by the client and passed unmodified as an attribute '__restart'
@@ -2565,9 +2153,6 @@
 
 // The event indicates that a thread has started or exited.
 struct ThreadEvent : public Event {
-  ThreadEvent();
-  ~ThreadEvent();
-
   // The reason for the event.
   //
   // May be one of the following enumeration values:
@@ -2581,9 +2166,6 @@
 
 // A Thread
 struct Thread {
-  Thread();
-  ~Thread();
-
   // Unique identifier for the thread.
   integer id;
   // A name of the thread.
@@ -2594,9 +2176,6 @@
 
 // Response to 'threads' request.
 struct ThreadsResponse : public Response {
-  ThreadsResponse();
-  ~ThreadsResponse();
-
   // All threads.
   array<Thread> threads;
 };
@@ -2606,9 +2185,6 @@
 // The request retrieves a list of all threads.
 struct ThreadsRequest : public Request {
   using Response = ThreadsResponse;
-
-  ThreadsRequest();
-  ~ThreadsRequest();
 };
 
 DAP_DECLARE_STRUCT_TYPEINFO(ThreadsRequest);
@@ -2624,9 +2200,6 @@
 // 'indexedVariables' attributes. The client can use this optional information
 // to present the children in a paged UI and fetch them in chunks.
 struct Variable {
-  Variable();
-  ~Variable();
-
   // Optional evaluatable name of this variable which can be passed to the
   // 'EvaluateRequest' to fetch the variable's value.
   optional<string> evaluateName;
@@ -2665,9 +2238,6 @@
 
 // Response to 'variables' request.
 struct VariablesResponse : public Response {
-  VariablesResponse();
-  ~VariablesResponse();
-
   // All (or a range) of variables for the given variable reference.
   array<Variable> variables;
 };
@@ -2679,10 +2249,6 @@
 // or indexed children.
 struct VariablesRequest : public Request {
   using Response = VariablesResponse;
-
-  VariablesRequest();
-  ~VariablesRequest();
-
   // The number of variables to return. If count is missing or 0, all variables
   // are returned.
   optional<integer> count;
diff --git a/include/dap/serialization.h b/include/dap/serialization.h
index 998cb37..ee4fd87 100644
--- a/include/dap/serialization.h
+++ b/include/dap/serialization.h
@@ -38,6 +38,8 @@
 // Methods that return a bool use this to indicate success.
 class Deserializer {
  public:
+  virtual ~Deserializer() = default;
+
   // deserialization methods for simple data types.
   // If the stored object is not of the correct type, then these function will
   // return false.
@@ -104,7 +106,7 @@
   T v;
   if (deserialize(&v)) {
     *opt = v;
-  };
+  }
   return true;
 }
 
@@ -132,6 +134,8 @@
 // Methods that return a bool use this to indicate success.
 class Serializer {
  public:
+  virtual ~Serializer() = default;
+
   // serialization methods for simple data types.
   virtual bool serialize(boolean) = 0;
   virtual bool serialize(integer) = 0;
@@ -215,6 +219,8 @@
   template <typename T>
   using IsSerializeFunc = std::is_convertible<T, SerializeFunc>;
 
+  virtual ~FieldSerializer() = default;
+
   // field() encodes a field to the struct object referenced by this Serializer.
   // The SerializeFunc will be called with a Serializer used to encode the
   // field's data.
diff --git a/include/dap/session.h b/include/dap/session.h
index da05feb..52be9f2 100644
--- a/include/dap/session.h
+++ b/include/dap/session.h
@@ -98,14 +98,13 @@
 };
 
 template <typename T>
-ResponseOrError<T>::ResponseOrError(const T& response) : response(response) {}
+ResponseOrError<T>::ResponseOrError(const T& resp) : response(resp) {}
 template <typename T>
-ResponseOrError<T>::ResponseOrError(T&& response)
-    : response(std::move(response)) {}
+ResponseOrError<T>::ResponseOrError(T&& resp) : response(std::move(resp)) {}
 template <typename T>
-ResponseOrError<T>::ResponseOrError(const Error& error) : error(error) {}
+ResponseOrError<T>::ResponseOrError(const Error& err) : error(err) {}
 template <typename T>
-ResponseOrError<T>::ResponseOrError(Error&& error) : error(std::move(error)) {}
+ResponseOrError<T>::ResponseOrError(Error&& err) : error(std::move(err)) {}
 template <typename T>
 ResponseOrError<T>::ResponseOrError(const ResponseOrError& other)
     : response(other.response), error(other.error) {}
@@ -148,7 +147,7 @@
   using ArgTy = typename detail::ArgTy<F>::type;
 
  public:
-  virtual ~Session() = default;
+  virtual ~Session();
 
   // ErrorHandler is the type of callback function used for reporting protocol
   // errors.
diff --git a/include/dap/typeinfo.h b/include/dap/typeinfo.h
index fbef4e8..11f1f12 100644
--- a/include/dap/typeinfo.h
+++ b/include/dap/typeinfo.h
@@ -28,6 +28,7 @@
 // types. TypeInfo is used by the serialization system to encode and decode DAP
 // requests, responses, events and structs.
 struct TypeInfo {
+  virtual ~TypeInfo();
   virtual std::string name() const = 0;
   virtual size_t size() const = 0;
   virtual size_t alignment() const = 0;
diff --git a/include/dap/typeof.h b/include/dap/typeof.h
index e682ab5..ba2b045 100644
--- a/include/dap/typeof.h
+++ b/include/dap/typeof.h
@@ -26,7 +26,7 @@
 // template type T.
 template <typename T>
 struct BasicTypeInfo : public TypeInfo {
-  BasicTypeInfo(const std::string& name) : name_(name) {}
+  constexpr BasicTypeInfo(std::string&& name) : name_(std::move(name)) {}
 
   // TypeInfo compliance
   inline std::string name() const { return name_; }
@@ -88,6 +88,15 @@
   static const TypeInfo* type();
 };
 
+// TypeOf for template types requires dynamic generation of type information,
+// triggering the clang -Wexit-time-destructors warning.
+// TODO(bclayton): See if there's a way to avoid this, without requiring manual
+// instantiation of each type.
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wexit-time-destructors"
+#endif  // __clang__
+
 template <typename T>
 struct TypeOf<array<T>> {
   static inline const TypeInfo* type() {
@@ -114,6 +123,10 @@
   }
 };
 
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif  // __clang__
+
 // DAP_OFFSETOF() macro is a generalization of the offsetof() macro defined in
 // <cstddef>. It evaluates to the offset of the given field, with fewer
 // restrictions than offsetof(). We cast the address '32' and subtract it again,
diff --git a/include/dap/variant.h b/include/dap/variant.h
index 637787c..96e57c2 100644
--- a/include/dap/variant.h
+++ b/include/dap/variant.h
@@ -72,7 +72,7 @@
 
 template <typename T0, typename... Types>
 template <typename T>
-variant<T0, Types...>::variant(const T& value) : value(value) {
+variant<T0, Types...>::variant(const T& v) : value(v) {
   static_assert(accepts<T>(), "variant does not accept template type T");
 }
 
diff --git a/src/protocol_events.cpp b/src/protocol_events.cpp
index d5dc01b..5be9e9f 100644
--- a/src/protocol_events.cpp
+++ b/src/protocol_events.cpp
@@ -21,53 +21,37 @@
 
 namespace dap {
 
-BreakpointEvent::BreakpointEvent() = default;
-BreakpointEvent::~BreakpointEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(BreakpointEvent,
                               "breakpoint",
                               DAP_FIELD(breakpoint, "breakpoint"),
                               DAP_FIELD(reason, "reason"));
 
-CapabilitiesEvent::CapabilitiesEvent() = default;
-CapabilitiesEvent::~CapabilitiesEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(CapabilitiesEvent,
                               "capabilities",
                               DAP_FIELD(capabilities, "capabilities"));
 
-ContinuedEvent::ContinuedEvent() = default;
-ContinuedEvent::~ContinuedEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ContinuedEvent,
                               "continued",
                               DAP_FIELD(allThreadsContinued,
                                         "allThreadsContinued"),
                               DAP_FIELD(threadId, "threadId"));
 
-ExitedEvent::ExitedEvent() = default;
-ExitedEvent::~ExitedEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ExitedEvent,
                               "exited",
                               DAP_FIELD(exitCode, "exitCode"));
 
-InitializedEvent::InitializedEvent() = default;
-InitializedEvent::~InitializedEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(InitializedEvent, "initialized");
 
-LoadedSourceEvent::LoadedSourceEvent() = default;
-LoadedSourceEvent::~LoadedSourceEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(LoadedSourceEvent,
                               "loadedSource",
                               DAP_FIELD(reason, "reason"),
                               DAP_FIELD(source, "source"));
 
-ModuleEvent::ModuleEvent() = default;
-ModuleEvent::~ModuleEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ModuleEvent,
                               "module",
                               DAP_FIELD(module, "module"),
                               DAP_FIELD(reason, "reason"));
 
-OutputEvent::OutputEvent() = default;
-OutputEvent::~OutputEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(OutputEvent,
                               "output",
                               DAP_FIELD(category, "category"),
@@ -80,8 +64,6 @@
                               DAP_FIELD(variablesReference,
                                         "variablesReference"));
 
-ProcessEvent::ProcessEvent() = default;
-ProcessEvent::~ProcessEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ProcessEvent,
                               "process",
                               DAP_FIELD(isLocalProcess, "isLocalProcess"),
@@ -90,15 +72,11 @@
                               DAP_FIELD(startMethod, "startMethod"),
                               DAP_FIELD(systemProcessId, "systemProcessId"));
 
-ProgressEndEvent::ProgressEndEvent() = default;
-ProgressEndEvent::~ProgressEndEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ProgressEndEvent,
                               "progressEnd",
                               DAP_FIELD(message, "message"),
                               DAP_FIELD(progressId, "progressId"));
 
-ProgressStartEvent::ProgressStartEvent() = default;
-ProgressStartEvent::~ProgressStartEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ProgressStartEvent,
                               "progressStart",
                               DAP_FIELD(cancellable, "cancellable"),
@@ -108,16 +86,12 @@
                               DAP_FIELD(requestId, "requestId"),
                               DAP_FIELD(title, "title"));
 
-ProgressUpdateEvent::ProgressUpdateEvent() = default;
-ProgressUpdateEvent::~ProgressUpdateEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ProgressUpdateEvent,
                               "progressUpdate",
                               DAP_FIELD(message, "message"),
                               DAP_FIELD(percentage, "percentage"),
                               DAP_FIELD(progressId, "progressId"));
 
-StoppedEvent::StoppedEvent() = default;
-StoppedEvent::~StoppedEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(StoppedEvent,
                               "stopped",
                               DAP_FIELD(allThreadsStopped, "allThreadsStopped"),
@@ -127,14 +101,10 @@
                               DAP_FIELD(text, "text"),
                               DAP_FIELD(threadId, "threadId"));
 
-TerminatedEvent::TerminatedEvent() = default;
-TerminatedEvent::~TerminatedEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(TerminatedEvent,
                               "terminated",
                               DAP_FIELD(restart, "restart"));
 
-ThreadEvent::ThreadEvent() = default;
-ThreadEvent::~ThreadEvent() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ThreadEvent,
                               "thread",
                               DAP_FIELD(reason, "reason"),
diff --git a/src/protocol_requests.cpp b/src/protocol_requests.cpp
index 7ae4cd8..bdfb7c3 100644
--- a/src/protocol_requests.cpp
+++ b/src/protocol_requests.cpp
@@ -21,14 +21,10 @@
 
 namespace dap {
 
-AttachRequest::AttachRequest() = default;
-AttachRequest::~AttachRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(AttachRequest,
                               "attach",
                               DAP_FIELD(restart, "__restart"));
 
-BreakpointLocationsRequest::BreakpointLocationsRequest() = default;
-BreakpointLocationsRequest::~BreakpointLocationsRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(BreakpointLocationsRequest,
                               "breakpointLocations",
                               DAP_FIELD(column, "column"),
@@ -37,15 +33,11 @@
                               DAP_FIELD(line, "line"),
                               DAP_FIELD(source, "source"));
 
-CancelRequest::CancelRequest() = default;
-CancelRequest::~CancelRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(CancelRequest,
                               "cancel",
                               DAP_FIELD(progressId, "progressId"),
                               DAP_FIELD(requestId, "requestId"));
 
-CompletionsRequest::CompletionsRequest() = default;
-CompletionsRequest::~CompletionsRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(CompletionsRequest,
                               "completions",
                               DAP_FIELD(column, "column"),
@@ -53,26 +45,18 @@
                               DAP_FIELD(line, "line"),
                               DAP_FIELD(text, "text"));
 
-ConfigurationDoneRequest::ConfigurationDoneRequest() = default;
-ConfigurationDoneRequest::~ConfigurationDoneRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ConfigurationDoneRequest, "configurationDone");
 
-ContinueRequest::ContinueRequest() = default;
-ContinueRequest::~ContinueRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ContinueRequest,
                               "continue",
                               DAP_FIELD(threadId, "threadId"));
 
-DataBreakpointInfoRequest::DataBreakpointInfoRequest() = default;
-DataBreakpointInfoRequest::~DataBreakpointInfoRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(DataBreakpointInfoRequest,
                               "dataBreakpointInfo",
                               DAP_FIELD(name, "name"),
                               DAP_FIELD(variablesReference,
                                         "variablesReference"));
 
-DisassembleRequest::DisassembleRequest() = default;
-DisassembleRequest::~DisassembleRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(DisassembleRequest,
                               "disassemble",
                               DAP_FIELD(instructionCount, "instructionCount"),
@@ -81,16 +65,12 @@
                               DAP_FIELD(offset, "offset"),
                               DAP_FIELD(resolveSymbols, "resolveSymbols"));
 
-DisconnectRequest::DisconnectRequest() = default;
-DisconnectRequest::~DisconnectRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(DisconnectRequest,
                               "disconnect",
                               DAP_FIELD(restart, "restart"),
                               DAP_FIELD(terminateDebuggee,
                                         "terminateDebuggee"));
 
-EvaluateRequest::EvaluateRequest() = default;
-EvaluateRequest::~EvaluateRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(EvaluateRequest,
                               "evaluate",
                               DAP_FIELD(context, "context"),
@@ -98,29 +78,21 @@
                               DAP_FIELD(format, "format"),
                               DAP_FIELD(frameId, "frameId"));
 
-ExceptionInfoRequest::ExceptionInfoRequest() = default;
-ExceptionInfoRequest::~ExceptionInfoRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ExceptionInfoRequest,
                               "exceptionInfo",
                               DAP_FIELD(threadId, "threadId"));
 
-GotoRequest::GotoRequest() = default;
-GotoRequest::~GotoRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(GotoRequest,
                               "goto",
                               DAP_FIELD(targetId, "targetId"),
                               DAP_FIELD(threadId, "threadId"));
 
-GotoTargetsRequest::GotoTargetsRequest() = default;
-GotoTargetsRequest::~GotoTargetsRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(GotoTargetsRequest,
                               "gotoTargets",
                               DAP_FIELD(column, "column"),
                               DAP_FIELD(line, "line"),
                               DAP_FIELD(source, "source"));
 
-InitializeRequest::InitializeRequest() = default;
-InitializeRequest::~InitializeRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(
     InitializeRequest,
     "initialize",
@@ -137,63 +109,43 @@
     DAP_FIELD(supportsVariablePaging, "supportsVariablePaging"),
     DAP_FIELD(supportsVariableType, "supportsVariableType"));
 
-LaunchRequest::LaunchRequest() = default;
-LaunchRequest::~LaunchRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(LaunchRequest,
                               "launch",
                               DAP_FIELD(restart, "__restart"),
                               DAP_FIELD(noDebug, "noDebug"));
 
-LoadedSourcesRequest::LoadedSourcesRequest() = default;
-LoadedSourcesRequest::~LoadedSourcesRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(LoadedSourcesRequest, "loadedSources");
 
-ModulesRequest::ModulesRequest() = default;
-ModulesRequest::~ModulesRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ModulesRequest,
                               "modules",
                               DAP_FIELD(moduleCount, "moduleCount"),
                               DAP_FIELD(startModule, "startModule"));
 
-NextRequest::NextRequest() = default;
-NextRequest::~NextRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(NextRequest,
                               "next",
                               DAP_FIELD(granularity, "granularity"),
                               DAP_FIELD(threadId, "threadId"));
 
-PauseRequest::PauseRequest() = default;
-PauseRequest::~PauseRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(PauseRequest,
                               "pause",
                               DAP_FIELD(threadId, "threadId"));
 
-ReadMemoryRequest::ReadMemoryRequest() = default;
-ReadMemoryRequest::~ReadMemoryRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ReadMemoryRequest,
                               "readMemory",
                               DAP_FIELD(count, "count"),
                               DAP_FIELD(memoryReference, "memoryReference"),
                               DAP_FIELD(offset, "offset"));
 
-RestartFrameRequest::RestartFrameRequest() = default;
-RestartFrameRequest::~RestartFrameRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(RestartFrameRequest,
                               "restartFrame",
                               DAP_FIELD(frameId, "frameId"));
 
-RestartRequest::RestartRequest() = default;
-RestartRequest::~RestartRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(RestartRequest, "restart");
 
-ReverseContinueRequest::ReverseContinueRequest() = default;
-ReverseContinueRequest::~ReverseContinueRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ReverseContinueRequest,
                               "reverseContinue",
                               DAP_FIELD(threadId, "threadId"));
 
-RunInTerminalRequest::RunInTerminalRequest() = default;
-RunInTerminalRequest::~RunInTerminalRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(RunInTerminalRequest,
                               "runInTerminal",
                               DAP_FIELD(args, "args"),
@@ -202,14 +154,10 @@
                               DAP_FIELD(kind, "kind"),
                               DAP_FIELD(title, "title"));
 
-ScopesRequest::ScopesRequest() = default;
-ScopesRequest::~ScopesRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ScopesRequest,
                               "scopes",
                               DAP_FIELD(frameId, "frameId"));
 
-SetBreakpointsRequest::SetBreakpointsRequest() = default;
-SetBreakpointsRequest::~SetBreakpointsRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SetBreakpointsRequest,
                               "setBreakpoints",
                               DAP_FIELD(breakpoints, "breakpoints"),
@@ -217,21 +165,15 @@
                               DAP_FIELD(source, "source"),
                               DAP_FIELD(sourceModified, "sourceModified"));
 
-SetDataBreakpointsRequest::SetDataBreakpointsRequest() = default;
-SetDataBreakpointsRequest::~SetDataBreakpointsRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SetDataBreakpointsRequest,
                               "setDataBreakpoints",
                               DAP_FIELD(breakpoints, "breakpoints"));
 
-SetExceptionBreakpointsRequest::SetExceptionBreakpointsRequest() = default;
-SetExceptionBreakpointsRequest::~SetExceptionBreakpointsRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SetExceptionBreakpointsRequest,
                               "setExceptionBreakpoints",
                               DAP_FIELD(exceptionOptions, "exceptionOptions"),
                               DAP_FIELD(filters, "filters"));
 
-SetExpressionRequest::SetExpressionRequest() = default;
-SetExpressionRequest::~SetExpressionRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SetExpressionRequest,
                               "setExpression",
                               DAP_FIELD(expression, "expression"),
@@ -239,20 +181,14 @@
                               DAP_FIELD(frameId, "frameId"),
                               DAP_FIELD(value, "value"));
 
-SetFunctionBreakpointsRequest::SetFunctionBreakpointsRequest() = default;
-SetFunctionBreakpointsRequest::~SetFunctionBreakpointsRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SetFunctionBreakpointsRequest,
                               "setFunctionBreakpoints",
                               DAP_FIELD(breakpoints, "breakpoints"));
 
-SetInstructionBreakpointsRequest::SetInstructionBreakpointsRequest() = default;
-SetInstructionBreakpointsRequest::~SetInstructionBreakpointsRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SetInstructionBreakpointsRequest,
                               "setInstructionBreakpoints",
                               DAP_FIELD(breakpoints, "breakpoints"));
 
-SetVariableRequest::SetVariableRequest() = default;
-SetVariableRequest::~SetVariableRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SetVariableRequest,
                               "setVariable",
                               DAP_FIELD(format, "format"),
@@ -261,15 +197,11 @@
                               DAP_FIELD(variablesReference,
                                         "variablesReference"));
 
-SourceRequest::SourceRequest() = default;
-SourceRequest::~SourceRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SourceRequest,
                               "source",
                               DAP_FIELD(source, "source"),
                               DAP_FIELD(sourceReference, "sourceReference"));
 
-StackTraceRequest::StackTraceRequest() = default;
-StackTraceRequest::~StackTraceRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(StackTraceRequest,
                               "stackTrace",
                               DAP_FIELD(format, "format"),
@@ -277,52 +209,36 @@
                               DAP_FIELD(startFrame, "startFrame"),
                               DAP_FIELD(threadId, "threadId"));
 
-StepBackRequest::StepBackRequest() = default;
-StepBackRequest::~StepBackRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(StepBackRequest,
                               "stepBack",
                               DAP_FIELD(granularity, "granularity"),
                               DAP_FIELD(threadId, "threadId"));
 
-StepInRequest::StepInRequest() = default;
-StepInRequest::~StepInRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(StepInRequest,
                               "stepIn",
                               DAP_FIELD(granularity, "granularity"),
                               DAP_FIELD(targetId, "targetId"),
                               DAP_FIELD(threadId, "threadId"));
 
-StepInTargetsRequest::StepInTargetsRequest() = default;
-StepInTargetsRequest::~StepInTargetsRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(StepInTargetsRequest,
                               "stepInTargets",
                               DAP_FIELD(frameId, "frameId"));
 
-StepOutRequest::StepOutRequest() = default;
-StepOutRequest::~StepOutRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(StepOutRequest,
                               "stepOut",
                               DAP_FIELD(granularity, "granularity"),
                               DAP_FIELD(threadId, "threadId"));
 
-TerminateRequest::TerminateRequest() = default;
-TerminateRequest::~TerminateRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(TerminateRequest,
                               "terminate",
                               DAP_FIELD(restart, "restart"));
 
-TerminateThreadsRequest::TerminateThreadsRequest() = default;
-TerminateThreadsRequest::~TerminateThreadsRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(TerminateThreadsRequest,
                               "terminateThreads",
                               DAP_FIELD(threadIds, "threadIds"));
 
-ThreadsRequest::ThreadsRequest() = default;
-ThreadsRequest::~ThreadsRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ThreadsRequest, "threads");
 
-VariablesRequest::VariablesRequest() = default;
-VariablesRequest::~VariablesRequest() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(VariablesRequest,
                               "variables",
                               DAP_FIELD(count, "count"),
diff --git a/src/protocol_response.cpp b/src/protocol_response.cpp
index ccf04cc..99a278f 100644
--- a/src/protocol_response.cpp
+++ b/src/protocol_response.cpp
@@ -21,39 +21,25 @@
 
 namespace dap {
 
-AttachResponse::AttachResponse() = default;
-AttachResponse::~AttachResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(AttachResponse, "");
 
-BreakpointLocationsResponse::BreakpointLocationsResponse() = default;
-BreakpointLocationsResponse::~BreakpointLocationsResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(BreakpointLocationsResponse,
                               "",
                               DAP_FIELD(breakpoints, "breakpoints"));
 
-CancelResponse::CancelResponse() = default;
-CancelResponse::~CancelResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(CancelResponse, "");
 
-CompletionsResponse::CompletionsResponse() = default;
-CompletionsResponse::~CompletionsResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(CompletionsResponse,
                               "",
                               DAP_FIELD(targets, "targets"));
 
-ConfigurationDoneResponse::ConfigurationDoneResponse() = default;
-ConfigurationDoneResponse::~ConfigurationDoneResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ConfigurationDoneResponse, "");
 
-ContinueResponse::ContinueResponse() = default;
-ContinueResponse::~ContinueResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ContinueResponse,
                               "",
                               DAP_FIELD(allThreadsContinued,
                                         "allThreadsContinued"));
 
-DataBreakpointInfoResponse::DataBreakpointInfoResponse() = default;
-DataBreakpointInfoResponse::~DataBreakpointInfoResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(DataBreakpointInfoResponse,
                               "",
                               DAP_FIELD(accessTypes, "accessTypes"),
@@ -61,22 +47,14 @@
                               DAP_FIELD(dataId, "dataId"),
                               DAP_FIELD(description, "description"));
 
-DisassembleResponse::DisassembleResponse() = default;
-DisassembleResponse::~DisassembleResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(DisassembleResponse,
                               "",
                               DAP_FIELD(instructions, "instructions"));
 
-DisconnectResponse::DisconnectResponse() = default;
-DisconnectResponse::~DisconnectResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(DisconnectResponse, "");
 
-ErrorResponse::ErrorResponse() = default;
-ErrorResponse::~ErrorResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ErrorResponse, "", DAP_FIELD(error, "error"));
 
-EvaluateResponse::EvaluateResponse() = default;
-EvaluateResponse::~EvaluateResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(EvaluateResponse,
                               "",
                               DAP_FIELD(indexedVariables, "indexedVariables"),
@@ -88,8 +66,6 @@
                               DAP_FIELD(variablesReference,
                                         "variablesReference"));
 
-ExceptionInfoResponse::ExceptionInfoResponse() = default;
-ExceptionInfoResponse::~ExceptionInfoResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ExceptionInfoResponse,
                               "",
                               DAP_FIELD(breakMode, "breakMode"),
@@ -97,18 +73,12 @@
                               DAP_FIELD(details, "details"),
                               DAP_FIELD(exceptionId, "exceptionId"));
 
-GotoResponse::GotoResponse() = default;
-GotoResponse::~GotoResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(GotoResponse, "");
 
-GotoTargetsResponse::GotoTargetsResponse() = default;
-GotoTargetsResponse::~GotoTargetsResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(GotoTargetsResponse,
                               "",
                               DAP_FIELD(targets, "targets"));
 
-InitializeResponse::InitializeResponse() = default;
-InitializeResponse::~InitializeResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(
     InitializeResponse,
     "",
@@ -154,80 +124,50 @@
     DAP_FIELD(supportsValueFormattingOptions,
               "supportsValueFormattingOptions"));
 
-LaunchResponse::LaunchResponse() = default;
-LaunchResponse::~LaunchResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(LaunchResponse, "");
 
-LoadedSourcesResponse::LoadedSourcesResponse() = default;
-LoadedSourcesResponse::~LoadedSourcesResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(LoadedSourcesResponse,
                               "",
                               DAP_FIELD(sources, "sources"));
 
-ModulesResponse::ModulesResponse() = default;
-ModulesResponse::~ModulesResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ModulesResponse,
                               "",
                               DAP_FIELD(modules, "modules"),
                               DAP_FIELD(totalModules, "totalModules"));
 
-NextResponse::NextResponse() = default;
-NextResponse::~NextResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(NextResponse, "");
 
-PauseResponse::PauseResponse() = default;
-PauseResponse::~PauseResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(PauseResponse, "");
 
-ReadMemoryResponse::ReadMemoryResponse() = default;
-ReadMemoryResponse::~ReadMemoryResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ReadMemoryResponse,
                               "",
                               DAP_FIELD(address, "address"),
                               DAP_FIELD(data, "data"),
                               DAP_FIELD(unreadableBytes, "unreadableBytes"));
 
-RestartFrameResponse::RestartFrameResponse() = default;
-RestartFrameResponse::~RestartFrameResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(RestartFrameResponse, "");
 
-RestartResponse::RestartResponse() = default;
-RestartResponse::~RestartResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(RestartResponse, "");
 
-ReverseContinueResponse::ReverseContinueResponse() = default;
-ReverseContinueResponse::~ReverseContinueResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ReverseContinueResponse, "");
 
-RunInTerminalResponse::RunInTerminalResponse() = default;
-RunInTerminalResponse::~RunInTerminalResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(RunInTerminalResponse,
                               "",
                               DAP_FIELD(processId, "processId"),
                               DAP_FIELD(shellProcessId, "shellProcessId"));
 
-ScopesResponse::ScopesResponse() = default;
-ScopesResponse::~ScopesResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ScopesResponse, "", DAP_FIELD(scopes, "scopes"));
 
-SetBreakpointsResponse::SetBreakpointsResponse() = default;
-SetBreakpointsResponse::~SetBreakpointsResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SetBreakpointsResponse,
                               "",
                               DAP_FIELD(breakpoints, "breakpoints"));
 
-SetDataBreakpointsResponse::SetDataBreakpointsResponse() = default;
-SetDataBreakpointsResponse::~SetDataBreakpointsResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SetDataBreakpointsResponse,
                               "",
                               DAP_FIELD(breakpoints, "breakpoints"));
 
-SetExceptionBreakpointsResponse::SetExceptionBreakpointsResponse() = default;
-SetExceptionBreakpointsResponse::~SetExceptionBreakpointsResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SetExceptionBreakpointsResponse, "");
 
-SetExpressionResponse::SetExpressionResponse() = default;
-SetExpressionResponse::~SetExpressionResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SetExpressionResponse,
                               "",
                               DAP_FIELD(indexedVariables, "indexedVariables"),
@@ -238,22 +178,14 @@
                               DAP_FIELD(variablesReference,
                                         "variablesReference"));
 
-SetFunctionBreakpointsResponse::SetFunctionBreakpointsResponse() = default;
-SetFunctionBreakpointsResponse::~SetFunctionBreakpointsResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SetFunctionBreakpointsResponse,
                               "",
                               DAP_FIELD(breakpoints, "breakpoints"));
 
-SetInstructionBreakpointsResponse::SetInstructionBreakpointsResponse() =
-    default;
-SetInstructionBreakpointsResponse::~SetInstructionBreakpointsResponse() =
-    default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SetInstructionBreakpointsResponse,
                               "",
                               DAP_FIELD(breakpoints, "breakpoints"));
 
-SetVariableResponse::SetVariableResponse() = default;
-SetVariableResponse::~SetVariableResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SetVariableResponse,
                               "",
                               DAP_FIELD(indexedVariables, "indexedVariables"),
@@ -263,54 +195,34 @@
                               DAP_FIELD(variablesReference,
                                         "variablesReference"));
 
-SourceResponse::SourceResponse() = default;
-SourceResponse::~SourceResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SourceResponse,
                               "",
                               DAP_FIELD(content, "content"),
                               DAP_FIELD(mimeType, "mimeType"));
 
-StackTraceResponse::StackTraceResponse() = default;
-StackTraceResponse::~StackTraceResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(StackTraceResponse,
                               "",
                               DAP_FIELD(stackFrames, "stackFrames"),
                               DAP_FIELD(totalFrames, "totalFrames"));
 
-StepBackResponse::StepBackResponse() = default;
-StepBackResponse::~StepBackResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(StepBackResponse, "");
 
-StepInResponse::StepInResponse() = default;
-StepInResponse::~StepInResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(StepInResponse, "");
 
-StepInTargetsResponse::StepInTargetsResponse() = default;
-StepInTargetsResponse::~StepInTargetsResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(StepInTargetsResponse,
                               "",
                               DAP_FIELD(targets, "targets"));
 
-StepOutResponse::StepOutResponse() = default;
-StepOutResponse::~StepOutResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(StepOutResponse, "");
 
-TerminateResponse::TerminateResponse() = default;
-TerminateResponse::~TerminateResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(TerminateResponse, "");
 
-TerminateThreadsResponse::TerminateThreadsResponse() = default;
-TerminateThreadsResponse::~TerminateThreadsResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(TerminateThreadsResponse, "");
 
-ThreadsResponse::ThreadsResponse() = default;
-ThreadsResponse::~ThreadsResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ThreadsResponse,
                               "",
                               DAP_FIELD(threads, "threads"));
 
-VariablesResponse::VariablesResponse() = default;
-VariablesResponse::~VariablesResponse() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(VariablesResponse,
                               "",
                               DAP_FIELD(variables, "variables"));
diff --git a/src/protocol_types.cpp b/src/protocol_types.cpp
index 7d30567..61047cd 100644
--- a/src/protocol_types.cpp
+++ b/src/protocol_types.cpp
@@ -21,19 +21,13 @@
 
 namespace dap {
 
-ChecksumAlgorithm::ChecksumAlgorithm() = default;
-ChecksumAlgorithm::~ChecksumAlgorithm() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ChecksumAlgorithm, "");
 
-Checksum::Checksum() = default;
-Checksum::~Checksum() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(Checksum,
                               "",
                               DAP_FIELD(algorithm, "algorithm"),
                               DAP_FIELD(checksum, "checksum"));
 
-Source::Source() = default;
-Source::~Source() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(Source,
                               "",
                               DAP_FIELD(adapterData, "adapterData"),
@@ -45,8 +39,6 @@
                               DAP_FIELD(sourceReference, "sourceReference"),
                               DAP_FIELD(sources, "sources"));
 
-Breakpoint::Breakpoint() = default;
-Breakpoint::~Breakpoint() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(Breakpoint,
                               "",
                               DAP_FIELD(column, "column"),
@@ -61,8 +53,6 @@
                               DAP_FIELD(source, "source"),
                               DAP_FIELD(verified, "verified"));
 
-BreakpointLocation::BreakpointLocation() = default;
-BreakpointLocation::~BreakpointLocation() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(BreakpointLocation,
                               "",
                               DAP_FIELD(column, "column"),
@@ -70,8 +60,6 @@
                               DAP_FIELD(endLine, "endLine"),
                               DAP_FIELD(line, "line"));
 
-ColumnDescriptor::ColumnDescriptor() = default;
-ColumnDescriptor::~ColumnDescriptor() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ColumnDescriptor,
                               "",
                               DAP_FIELD(attributeName, "attributeName"),
@@ -80,16 +68,12 @@
                               DAP_FIELD(type, "type"),
                               DAP_FIELD(width, "width"));
 
-ExceptionBreakpointsFilter::ExceptionBreakpointsFilter() = default;
-ExceptionBreakpointsFilter::~ExceptionBreakpointsFilter() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ExceptionBreakpointsFilter,
                               "",
                               DAP_FIELD(def, "default"),
                               DAP_FIELD(filter, "filter"),
                               DAP_FIELD(label, "label"));
 
-Capabilities::Capabilities() = default;
-Capabilities::~Capabilities() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(
     Capabilities,
     "",
@@ -135,12 +119,8 @@
     DAP_FIELD(supportsValueFormattingOptions,
               "supportsValueFormattingOptions"));
 
-CompletionItemType::CompletionItemType() = default;
-CompletionItemType::~CompletionItemType() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(CompletionItemType, "");
 
-CompletionItem::CompletionItem() = default;
-CompletionItem::~CompletionItem() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(CompletionItem,
                               "",
                               DAP_FIELD(label, "label"),
@@ -152,12 +132,8 @@
                               DAP_FIELD(text, "text"),
                               DAP_FIELD(type, "type"));
 
-DataBreakpointAccessType::DataBreakpointAccessType() = default;
-DataBreakpointAccessType::~DataBreakpointAccessType() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(DataBreakpointAccessType, "");
 
-DisassembledInstruction::DisassembledInstruction() = default;
-DisassembledInstruction::~DisassembledInstruction() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(DisassembledInstruction,
                               "",
                               DAP_FIELD(address, "address"),
@@ -170,8 +146,6 @@
                               DAP_FIELD(location, "location"),
                               DAP_FIELD(symbol, "symbol"));
 
-Message::Message() = default;
-Message::~Message() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(Message,
                               "",
                               DAP_FIELD(format, "format"),
@@ -182,24 +156,16 @@
                               DAP_FIELD(urlLabel, "urlLabel"),
                               DAP_FIELD(variables, "variables"));
 
-VariablePresentationHint::VariablePresentationHint() = default;
-VariablePresentationHint::~VariablePresentationHint() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(VariablePresentationHint,
                               "",
                               DAP_FIELD(attributes, "attributes"),
                               DAP_FIELD(kind, "kind"),
                               DAP_FIELD(visibility, "visibility"));
 
-ValueFormat::ValueFormat() = default;
-ValueFormat::~ValueFormat() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ValueFormat, "", DAP_FIELD(hex, "hex"));
 
-ExceptionBreakMode::ExceptionBreakMode() = default;
-ExceptionBreakMode::~ExceptionBreakMode() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ExceptionBreakMode, "");
 
-ExceptionDetails::ExceptionDetails() = default;
-ExceptionDetails::~ExceptionDetails() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ExceptionDetails,
                               "",
                               DAP_FIELD(evaluateName, "evaluateName"),
@@ -209,8 +175,6 @@
                               DAP_FIELD(stackTrace, "stackTrace"),
                               DAP_FIELD(typeName, "typeName"));
 
-GotoTarget::GotoTarget() = default;
-GotoTarget::~GotoTarget() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(GotoTarget,
                               "",
                               DAP_FIELD(column, "column"),
@@ -222,8 +186,6 @@
                               DAP_FIELD(label, "label"),
                               DAP_FIELD(line, "line"));
 
-Module::Module() = default;
-Module::~Module() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(Module,
                               "",
                               DAP_FIELD(addressRange, "addressRange"),
@@ -237,12 +199,8 @@
                               DAP_FIELD(symbolStatus, "symbolStatus"),
                               DAP_FIELD(version, "version"));
 
-SteppingGranularity::SteppingGranularity() = default;
-SteppingGranularity::~SteppingGranularity() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SteppingGranularity, "");
 
-Scope::Scope() = default;
-Scope::~Scope() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(Scope,
                               "",
                               DAP_FIELD(column, "column"),
@@ -258,8 +216,6 @@
                               DAP_FIELD(variablesReference,
                                         "variablesReference"));
 
-SourceBreakpoint::SourceBreakpoint() = default;
-SourceBreakpoint::~SourceBreakpoint() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(SourceBreakpoint,
                               "",
                               DAP_FIELD(column, "column"),
@@ -268,8 +224,6 @@
                               DAP_FIELD(line, "line"),
                               DAP_FIELD(logMessage, "logMessage"));
 
-DataBreakpoint::DataBreakpoint() = default;
-DataBreakpoint::~DataBreakpoint() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(DataBreakpoint,
                               "",
                               DAP_FIELD(accessType, "accessType"),
@@ -277,30 +231,22 @@
                               DAP_FIELD(dataId, "dataId"),
                               DAP_FIELD(hitCondition, "hitCondition"));
 
-ExceptionPathSegment::ExceptionPathSegment() = default;
-ExceptionPathSegment::~ExceptionPathSegment() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ExceptionPathSegment,
                               "",
                               DAP_FIELD(names, "names"),
                               DAP_FIELD(negate, "negate"));
 
-ExceptionOptions::ExceptionOptions() = default;
-ExceptionOptions::~ExceptionOptions() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(ExceptionOptions,
                               "",
                               DAP_FIELD(breakMode, "breakMode"),
                               DAP_FIELD(path, "path"));
 
-FunctionBreakpoint::FunctionBreakpoint() = default;
-FunctionBreakpoint::~FunctionBreakpoint() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(FunctionBreakpoint,
                               "",
                               DAP_FIELD(condition, "condition"),
                               DAP_FIELD(hitCondition, "hitCondition"),
                               DAP_FIELD(name, "name"));
 
-InstructionBreakpoint::InstructionBreakpoint() = default;
-InstructionBreakpoint::~InstructionBreakpoint() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(InstructionBreakpoint,
                               "",
                               DAP_FIELD(condition, "condition"),
@@ -309,8 +255,6 @@
                                         "instructionReference"),
                               DAP_FIELD(offset, "offset"));
 
-StackFrame::StackFrame() = default;
-StackFrame::~StackFrame() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(StackFrame,
                               "",
                               DAP_FIELD(column, "column"),
@@ -325,8 +269,6 @@
                               DAP_FIELD(presentationHint, "presentationHint"),
                               DAP_FIELD(source, "source"));
 
-StackFrameFormat::StackFrameFormat() = default;
-StackFrameFormat::~StackFrameFormat() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(StackFrameFormat,
                               "",
                               DAP_FIELD(includeAll, "includeAll"),
@@ -337,22 +279,16 @@
                               DAP_FIELD(parameterValues, "parameterValues"),
                               DAP_FIELD(parameters, "parameters"));
 
-StepInTarget::StepInTarget() = default;
-StepInTarget::~StepInTarget() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(StepInTarget,
                               "",
                               DAP_FIELD(id, "id"),
                               DAP_FIELD(label, "label"));
 
-Thread::Thread() = default;
-Thread::~Thread() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(Thread,
                               "",
                               DAP_FIELD(id, "id"),
                               DAP_FIELD(name, "name"));
 
-Variable::Variable() = default;
-Variable::~Variable() = default;
 DAP_IMPLEMENT_STRUCT_TYPEINFO(Variable,
                               "",
                               DAP_FIELD(evaluateName, "evaluateName"),
diff --git a/src/session.cpp b/src/session.cpp
index 6344e5a..4ea85a4 100644
--- a/src/session.cpp
+++ b/src/session.cpp
@@ -481,6 +481,8 @@
   message = buf;
 }
 
+Session::~Session() = default;
+
 std::unique_ptr<Session> Session::create() {
   return std::unique_ptr<Session>(new Impl());
 }
diff --git a/src/typeinfo.cpp b/src/typeinfo.cpp
new file mode 100644
index 0000000..dda481f
--- /dev/null
+++ b/src/typeinfo.cpp
@@ -0,0 +1,21 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "dap/typeinfo.h"
+
+namespace dap {
+
+TypeInfo::~TypeInfo() = default;
+
+}  // namespace dap
diff --git a/tools/protocol_gen/protocol_gen.go b/tools/protocol_gen/protocol_gen.go
index 781c053..b23b622 100644
--- a/tools/protocol_gen/protocol_gen.go
+++ b/tools/protocol_gen/protocol_gen.go
@@ -313,16 +313,6 @@
 		io.WriteString(w, ";")
 	}
 
-	// constructor
-	io.WriteString(w, "\n\n  ")
-	io.WriteString(w, s.name)
-	io.WriteString(w, "();")
-
-	// destructor
-	io.WriteString(w, "\n  ~")
-	io.WriteString(w, s.name)
-	io.WriteString(w, "();\n")
-
 	for _, f := range s.fields {
 		if f.desc != "" {
 			io.WriteString(w, "\n  // ")
@@ -353,18 +343,6 @@
 }
 
 func (s *cppStruct) writeCPP(w io.Writer) {
-	// constructor
-	io.WriteString(w, s.name)
-	io.WriteString(w, "::")
-	io.WriteString(w, s.name)
-	io.WriteString(w, "() = default;\n")
-
-	// destructor
-	io.WriteString(w, s.name)
-	io.WriteString(w, "::~")
-	io.WriteString(w, s.name)
-	io.WriteString(w, "() = default;\n")
-
 	// typeinfo
 	io.WriteString(w, "DAP_IMPLEMENT_STRUCT_TYPEINFO(")
 	io.WriteString(w, s.name)
