AutosarC++18_03-A14.7.2¶
Template specialization shall be declared in the same file (1) as the primary template (2) as a user-defined type, for which the specialization is declared
Required inputs: IR
Bad code (specialization in different file):
// template.h
template<typename T>
class Widget { /* definition */ };
// widget_int.cpp
template<> // ERROR: specialization in different file
class Widget<int> {
void process();
};
Good code (specialization in same file as primary):
// template.h
template<typename T>
class Widget { /* definition */ };
template<> // OK: specialization in same file as primary
class Widget<int> { /* specialized for int */ };
// other.cpp
#include "template.h" // Includes both primary and specialization
Exception (template only declared in header):
// template.h
template<typename T>
class Widget; // Forward declaration only
// template.cpp
template<typename T>
class Widget { /* definition in .cpp */ };
template<>
class Widget<int> { /* OK: may be in different file */ };
Possible Messages
Key |
Text |
Severity |
Disabled |
|---|---|---|---|
template_specialization_in_different_file |
Specialization not declared in same file as primary template |
None |
False |
Options¶
This rule shares the following common options: exclude_in_macros, exclude_messages_in_system_headers, excludes, extend_exclude_to_macro_invocations, includes, justification_checker, languages, post_processing, provider, report_at, severity
The following places define options that affect this rule: Stylechecks, Analysis-GlobalOptions
allow_in_directly_included_files¶
allow_in_directly_included_files : bool = False
allow_in_type_declaration_file and its modification
only_fully_specialized_with_class.
allow_in_type_declaration_file¶
allow_in_type_declaration_file : bool = True
only_fully_specialized_with_class¶
only_fully_specialized_with_class : bool = False
allow_in_type_declaration_file and has no effect if
allow_in_type_declaration_file is false.
relax_if_template_only_declared¶
relax_if_template_only_declared : bool = False