In general, non-debug ("release") builds of applications should link against the non-debug versions of the Intel® Threading Building Blocks (Intel® TBB) libraries, and debug builds should link against the debug versions of these libraries. On Windows* OS, compile with /MD and use Intel TBB release libraries, or compile with /MDd and use debug libraries; not doing so may cause run-time failures.
Some Intel TBB header files include the header file <windows.h>, which by default defines the macros min and max, and consequently breaks the standard C++ header files <limits> and <algorithm>. Defining the preprocessor symbol NOMINMAX causes <windows.h> to not define the offending macros. Thus, programs using Intel TBB and either of the aforementioned C++ headers should be compiled with /DNOMINMAX as a compiler argument or/and parentheses should be placed around std::min and std::max, e.g.: auto c = (std::min)(a,b).
For applications linked with the debug version of Microsoft* Universal CRT (ucrtbased.dll, used since Microsoft Visual C++ 14.0), dynamic replacement of memory management functions is not supported.
If an application uses static MSVCRT libraries or the Intel TBB library built with static MSVCRT (the vc_mt variant), and throws an exception from a functor passed to task_group::run_and_wait(), the exception will not be intercepted by Intel TBB and will not result in cancellation of the task group. For a workaround, catch the exception in the functor and cancel the task group explicitly.