FEAT 3
Finite Element Analysis Toolbox
Loading...
Searching...
No Matches
compiler_microsoft.hpp
Go to the documentation of this file.
1// FEAT3: Finite Element Analysis Toolbox, Version 3
2// Copyright (C) 2010 by Stefan Turek & the FEAT group
3// FEAT3 is released under the GNU General Public License version 3,
4// see the file 'copyright.txt' in the top level directory for details.
5
6#pragma once
7
15#if !defined(FEAT_COMPILER) && defined(_MSC_VER)
16
17// define FEAT_COMPILER_MICROSOFT macro
18# define FEAT_COMPILER_MICROSOFT _MSC_FULL_VER
19
20// define compiler version string
21# define FEAT_COMPILER ("Microsoft Visual C++ " FEAT_STRINGIFY(_MSC_FULL_VER))
22
23# define FEAT_PRAGMA_IVDEP __pragma(loop(ivdep))
24
25# define FEAT_DISABLE_WARNINGS __pragma(warning(push, 0))
26# define FEAT_RESTORE_WARNINGS __pragma(warning(pop))
27
28# define FORCE_INLINE __forceinline
29
30// define the noinline specifier
31# define NOINLINE __declspec(noinline)
32
33// C4061: enumerator 'identifier' in switch of enum 'enumeration' is not explicitly handled by a case label
34// This warning is emitted when a 'switch' handles one or more cases using a 'default' block.
35// Note: If there are unhandled cases and there is no default block, the compiler emits a C4062 warning.
36# pragma warning(disable: 4061)
37
38// C4127: conditional expression is constant
39// This warning arises for instance in an expression like 'if(true)'.
40# pragma warning(disable: 4127)
41
42// C4180: qualifier applied to function type has no meaning; ignored
43// This warning arises when a non-pointer return type of a function is declared as 'const'.
44# pragma warning(disable: 4180)
45
46// C4503: 'identifier': decorated name length exceeded, name was truncated
47// This warning arises from heavy template nesting, blowing the compiler's limit on maximal name lengths.
48// Running into this warning does not affect the correctness of the program, however, it might confuse
49// the debugger.
50# pragma warning(disable: 4503)
51
52// C4512: 'class': assignment operator could not be generated
53# pragma warning(disable: 4512)
54
55// C4514: 'function': unreferenced inline function has been removed
56// This is an annoying optimization information.
57# pragma warning(disable: 4514)
58
59// C4555: expression has no effect; expected expression with side-effect
60# pragma warning(disable: 4555)
61
62// C4571: Informational: catch(...) semantics changed since Visual C++ 7.1;
63// structured exceptions (SEH) are no longer caught
64# pragma warning(disable: 4571)
65
66// C4625: 'derived class': copy constructor could not be generated because
67// base class copy constructor is inaccessible
68// This warning arises from our non-copyable instantiation policy.
69# pragma warning(disable: 4625)
70
71// C4626: 'derived class': assignment operator could not be generated because
72// base class assignment operator is inaccessible
73// This warning arises from our non-copyable instantiation policy.
74# pragma warning(disable: 4626)
75
76// C4702: unreachable code
77// This warning is emitted in any case where the compiler detects a statement which will never be executed.
78// This happens e.g. in for-loops which always perform zero iterations due to the chosen template parameters,
79// buzzword 'dead code elimination'.
80# pragma warning(disable: 4702)
81
82// C4710: 'function': function not inlined
83// This is an annoying optimization information.
84# pragma warning(disable: 4710)
85
86// C4711: function 'function' selected for inline expansion
87// This is an annoying optimization information.
88# pragma warning(disable: 4711)
89
90// C4738: storing 32-bit float result in memory, possible loss of performance
91// This is an optimization warning, which arises from the strict fp-model.
92# pragma warning(disable: 4738)
93
94// C4820: 'bytes' bytes padding added after construct 'member_name'
95// This warning is disabled as it is mass-produced when compiling standard libraries.
96# pragma warning(disable: 4820)
97
98// C4883: function size suppresses optimizations
99// This is an annoying optimization information.
100# pragma warning(disable: 4883)
101
102// C4938: 'var' : Floating point reduction variable may cause inconsistent results
103// under /fp:strict or #pragma fenv_access
104// This warning is issued when reducing floating point variables via OpenMP and
105// it has been enabled because it only states the obvious effects of multithreading.
106# pragma warning(disable: 4938)
107
108// C5024: 'class' : move constructor was implicitly defined as deleted
109// C5025: 'class' : move assignment operator was implicitly defined as deleted
110// C5026: 'class' : move constructor was implicitly defined as deleted because
111// a base class move constructor is inaccessible or deleted
112// C5027: 'class' : move assignment operator was implicitly defined as deleted because
113// a base class move assignment operator is inaccessible or deleted
114# pragma warning(disable: 5024)
115# pragma warning(disable: 5025)
116# pragma warning(disable: 5026)
117# pragma warning(disable: 5027)
118
119// disable CRT security warnings for standard C/C++ library functions
120#ifndef _CRT_SECURE_NO_WARNINGS
121# define _CRT_SECURE_NO_WARNINGS 1
122#endif
123
124#endif // !defined(FEAT_COMPILER) && defined(_MSC_VER)