Changeset 1026


Ignore:
Timestamp:
11/26/20 01:10:49 (4 years ago)
Author:
Maciej Komosinski
Message:

Workarounds for Embarcadero 10.3u3 compiler bug and incompatibility

Location:
cpp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • cpp/common/nonstd_math.cpp

    r1001 r1026  
    2626                ss << x;
    2727                str = ss.str();
    28                 char *s = str.data(); //now we will be operating directly on the internal std::string buffer           
     28                char *s =
     29#ifdef __BORLANDC__ //embarcadero 10.3u3 compiler does not support char* str.data() even in C++17 mode?
     30                (char*)
     31#endif
     32                str.data(); //now we will be operating directly on the internal std::string buffer
    2933                for (int i = str.length() - 1, end = str.length(); i >= 0; i--) //remove trailing zeros, and maybe also '.'
    3034                {
  • cpp/frams/model/geometry/geometryutils.cpp

    r810 r1026  
    340340                y = b * sqrt(sqrt_arg);
    341341        else
     342#ifdef __BORLANDC__ //compiler bug: embarcadero 10.3u3 raises "invalid fp operation exception" even when the execution does not enter the "signaling_NaN()" branch of "if" (i.e. when sqrt_arg >= 0) so we avoid using signaling_NaN().
     343                y = std::numeric_limits<double>::max();
     344#else
    342345                y = std::numeric_limits<double>::signaling_NaN();
    343         //This function is called from MeshBuilder::EllipsoidSurface::findNextAreaEdgeAndPhase().
     346#endif
     347        //This function is called from MeshBuilder::EllipsoidSurface::findNextAreaEdgeAndPhase().
    344348        //y=NaN set above co-occurs with the value of x that doesn't meet the condition tested in findNextAreaEdgeAndPhase().
    345349        //If the condition is true (i.e., x exceeds the allowed range), entirely new values of x and y are set in the next step anyway.
Note: See TracChangeset for help on using the changeset viewer.