Specifications

CAVR-4
Part 1. Using the compiler
Using C++
111
To set the equivalent option in IAR Embedded Workbench, select
Project>Options>C/C++ Compiler>Language.
Feature descriptions
When writing C++ source code for the IAR C/C++ Compiler, there are some benefits
and some possible quirks that you need to be aware of when mixing C++ features—such
as classes, and class members—with IAR language extensions, such as IAR-specific
attributes.
CLASSES
A class type class and struct in C++ can have static and non-static data members,
and static and non-static function members. The non-static function members can be
further divided into virtual function members, non-virtual function members,
constructors, and destructors. For the static data members, static function members, and
non-static non-virtual function members the same rules apply as for statically linked
symbols outside of a class. In other words, they can have any applicable IAR-specific
type, memory, and object attribute.
The non-static virtual function members can have any applicable IAR-specific type,
memory, and object attribute as long as a pointer to the member function is implicitly
castable to the default function pointer type. The constructors, destructors, and
non-static data members cannot have any IAR attributes.
For further information about attributes, see Type and object attributes, page 144.
Example
class A {
public:
static __near int i @ 600; //Located in near at address 600
static __nearfunc void f(); //Located in nearfunc memory
__nearfunc void g(); //Located in nearfunc memory
virtual __nearfunc void h();//Located in nearfunc memory
};
The this pointer used for referring to a class object will by default have the data
memory attribute for the default data pointer type. This means that such a class object
can only be defined to reside in memory from which pointers can be implicitly casted to
a default data pointer.