# FeatStd 3.9

#### Increased stack size for Integrity threads

The stack size has been increased for Integrity threads. Every thread created by FeatStd::Internal::Thread is affected. So every [Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") engine thread other than the main thread has the new stack size.

#### Assertion function with message

Additional assertion function has been added which prints a defined messsage when hit. (9735) The macro FEATSTD\_DEBUG\_ASSERT\_MESSAGE(condition, message, ...) can be found in FeatStd/Diagnostics/Debug.h.  
This macro is resolved into the public interface:  
**bool FeatStd::Diagnostics::DebugControl::Assert(const Char\* expression, const Char\* filename, Int lineNr, const Char \*msgFormat, ...);**

#### Option to copy StringData

A CMake option FEATSTD\_STRINGDATA\_COPY\_ENABLED has been added for copying the internal StringData of a [FeatStd::String](http://dev.doc.cgistudio.at/APILINK/class_feat_std_1_1_string.html). When the flag is enabled (default: OFF), then instead of sharing and reference counting the internal StringData, it is copied. This might be useful in application environments, where [FeatStd::String](http://dev.doc.cgistudio.at/APILINK/class_feat_std_1_1_string.html) objects are modified by several threads without controlling access via [FeatStd::String::GetCriticalSection()](http://dev.doc.cgistudio.at/APILINK/class_feat_std_1_1_string.html#a52f64553ae443fd990eaafe85995f1a6).

#### Interface Changes

<div class="contents" id="bkmrk-shared-pointerfeatst"><div class="textblock">- Shared Pointer<span style="color: rgb(230, 126, 35);">  
    </span><span style="color: rgb(230, 126, 35);">[FeatStd::MemoryManagement::SharedPointer](http://dev.doc.cgistudio.at/APILINK/class_feat_std_1_1_memory_management_1_1_shared_pointer.html "An intrusive reference-counting smart pointer. If you want your class to be managed by SharedPointer ...") </span>is an intrusive smart pointer that injects 2 functions "Release" and "Retain" into the class scope of the object to be shared. Because "Release" and "Retain" are commonly used names for other functions, this can potentially result in a naming conflict with undefined behavior. Therefore these functions were renamed to "SharedPointerIntrusiveRelease" and "SharedPointerIntrusiveRetain". Any external use of these functions must be adapted.
- Migration Guide  
    <div class="contents"><div class="textblock"><table class="doxtable" style="width: 100%;"><tbody><tr><th style="width: 21.3423%;">**Description**</th><th style="width: 30.5981%;">**FeatStd V3.9.0**</th><th style="width: 48.0596%;">**[Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") V3.9.0**
    
    </th></tr><tr><td style="width: 21.3423%;">SharedPointer changes</td><td style="width: 30.5981%;">Using a SharedPointer within a class introduced "Release" and "Retain" functions.</td><td style="width: 48.0596%;">Using a SharedPointer within a class now introduces "SharedPointerIntrusiveRelease" and "SharedPointerIntrusiveRetain" instead.
    
    </td></tr></tbody></table>
    
    </div></div>

---

</div></div>