Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Warning - Unreferenced inline function has been removed

I am beginning to learn C++ and read that increasing the warning level is a good idea to be more careful in writing your code. I am using Visual Studio 2015 (community version)

However, after doing so, I receive hundreds of errors (edit: WARNINGS treated as errors, sorry) even in basic programs. These are all coming from the math header, and they say that "unreferenced inline function has been removed". Seems like every method I don't use is causing a warning.

Why is this happening, and how can I fix it?

like image 487
Daniel Avatar asked May 30 '16 14:05

Daniel


1 Answers

With Visual C++ you should use /W4, not /Wall which is impractical. If warning level 4 still produces sillywarnings, e.g. from standard headers, then consider using my old MSVC "no sillywarnings" header, or a suitable extension of it. Preferably then via a forced include compiler option.

For working with Visual C++ in the command line I generally use the following environment variable:

CL=/nologo /EHsc /GR /W4 /FI "iso646.h"

Apparently there is now automatic suppression of warnings from system headers, so it's not a problem.


Please note that while the holy C++ standard does not differentiate between different kinds of diagnostics, as a de facto standard C++ compilers and linkers differentiate between

  • Errors:
    An error diagnostic means that no executable (or object file) is produced.

  • Warnings:
    A warning diagnostic means that something was likely to be wrong, or at least was somewhat questionable, but the compiler or linker or other tool carried on assuming you knew what you were doing.


Relevant MSVC-specific headers you can force-include (option /FI), including a more up to date version of the no sillywarnings header:

msvc_less_errors_as_warnings_please.hpp
#pragma once
// p/cppx/core_language_support/compiler_specific/msvc_less_errors_as_warnings_please.hpp
// Copyright © Alf P. Steinbach 2015. Boost Software License 1.0.

#ifndef _MSC_VER
#   error This file is specific to the MSVC (Microsoft Visual C++) compiler.
#endif

#pragma warning( error: 4566 )      // Character ... cannot be represented  --  is error.
#pragma warning( error: 4627 )      // Source code has been ignored  –  is error.
msvc_more_warnings_please.hpp
#pragma once
// p/cppx/core_language_support/compiler_specific/msvc_more_warnings_please.hpp
// Copyright © Alf P. Steinbach 2015. Boost Software License 1.0.

#ifndef _MSC_VER
#   error This file is specific to the MSVC (Microsoft Visual C++) compiler.
#endif

#pragma warning( push, 4 )      // Warning level 4 (max). MSVC /Wall is impractical.
msvc_no_sillywarnings_please.hpp
#pragma once
// p/cppx/core_language_support/compiler_specific/msvc_no_sillywarnings_please.hpp
// Copyright © Alf P. Steinbach 2010 – 2015. Boost Software License 1.0.

#ifndef _MSC_VER
#   error This file is specific to the MSVC (Microsoft Visual C++) compiler.
#endif

#ifndef CPPX_ALLOW_WP64
#   // The /Wp64 option generates spurious warnings when a __w64 type argument selects
#   // a correct overload with non-__w64 formal argument type, i.e. for <<. In newer
#   // versions of MSVC this option is deprecated. It Really Annoyed a lot of people!
#   ifdef  _Wp64
#       error Do not use the /Wp64 option: use a 64-bit compiler to detect 64-bit portability issues.
#   endif
#endif

// The following are real warnings but are generated by almost all MS headers, including
// standard library headers, so it's impractical to leave them on.
#pragma  warning( disable: 4619 )   // there is no warning number 'XXXX'
#pragma  warning( disable: 4668 )   // XXX is not defined as a preprocessor macro

// The following are pure sillywarnings:
#pragma warning( disable: 4061 )    // enum value is not *explicitly* handled in switch
#pragma warning( disable: 4063 )    // case 'nn' is not a valid value for switch of enum 'Name'
#pragma warning( disable: 4099 )    // first seen using 'struct' now seen using 'class'
#pragma warning( disable: 4127 )    // conditional expression is constant
#pragma warning( disable: 4180 )    // qualifier applied to function type has no meaning
#pragma warning( disable: 4217 )    // member template isn't copy constructor
#pragma warning( disable: 4250 )    // inherits (implements) some member via dominance
#pragma warning( disable: 4251 )    // needs to have dll-interface to be used by clients
#pragma warning( disable: 4275 )    // exported class derived from non-exported class
#pragma warning( disable: 4347 )    // "behavior change", function called instead of template
#pragma warning( disable: 4355 )    // "'this': used in member initializer list
#pragma warning( disable: 4373 )    // override when arg types differ by const/volatile qualifiers
#pragma warning( disable: 4428 )    // MSVC 9: universal-character-name encountered in source
#pragma warning( disable: 4459 )    // local declaration hides global declaration
#pragma warning( disable: 4505 )    // unreferenced function has been removed
#pragma warning( disable: 4510 )    // default constructor could not be generated
#pragma warning( disable: 4511 )    // copy constructor could not be generated
#pragma warning( disable: 4512 )    // assignment operator could not be generated
#pragma warning( disable: 4513 )    // destructor could not be generated
#pragma warning( disable: 4610 )    // can never be instantiated user defined constructor required
#pragma warning( disable: 4623 )    // default constructor could not be generated
#pragma warning( disable: 4624 )    // destructor could not be generated
#pragma warning( disable: 4625 )    // copy constructor could not be generated
#pragma warning( disable: 4626 )    // assignment operator could not be generated
#pragma warning( disable: 4640 )    // a local static object is not thread-safe
#pragma warning( disable: 4646 )    // noreturn function should have a void return type
#pragma warning( disable: 4661 )    // a member of the template class is not defined.
#pragma warning( disable: 4670 )    // a base class of an exception class is inaccessible for catch
#pragma warning( disable: 4672 )    // a base class of an exception class is ambiguous for catch
#pragma warning( disable: 4673 )    // a base class of an exception class is inaccessible for catch
#pragma warning( disable: 4675 )    // resolved overload was found by argument-dependent lookup
#pragma warning( disable: 4702 )    // unreachable code, e.g. in <list> header.
#pragma warning( disable: 4710 )    // call was not inlined
#pragma warning( disable: 4711 )    // call was inlined
#pragma warning( disable: 4820 )    // some padding was added
#pragma warning( disable: 4917 )    // a GUID can only be associated with a class, interface or namespace
#pragma warning( disable: 4996 )    // MSVC 9: a C stdlib function has been "deprecated" (says MS)
like image 58
Cheers and hth. - Alf Avatar answered Nov 20 '22 05:11

Cheers and hth. - Alf