#pragma once

// Disable off-by-default warnings
#pragma warning (disable: 4339)  // L4: 'type' : use of undefined type detected in WinRT or CLR meta-data - use of this type may lead to a runtime exception
#pragma warning (disable: 4472)  // L1: 'type' is a native enum: add an access specifier (private/public) to declare a managed enum
#pragma warning (disable: 4514)  // L4: 'function' : unreferenced inline function has been removed
#pragma warning (disable: 4625)  // L4: 'derived class': copy constructor could not be generated because a base class copy constructor is inaccessible
#pragma warning (disable: 4626)  // L4: 'derived class': assignment operator could not be generated because a base class assignment operator is inaccessible or deleted
#pragma warning (disable: 4668)  // L4: 'symbol' is not defined as a preprocessor macro, replacing with '0' for 'directives'
#pragma warning (disable: 4710)  // L4: 'function' : function not inlined
#pragma warning (disable: 4711)  // L4: function 'function' selected for inline expansion
#pragma warning (disable: 4820)  // L4: 'bytes' bytes padding added after construct 'member_name'
#pragma warning (disable: 5026)  // L1/L4: 'type': move constructor was implicitly defined as deleted
#pragma warning (disable: 5027)  // L1/L4: 'type': move assignment operator was implicitly defined as deleted

// On-by-default warnings at -W4 that we want off
#pragma warning (disable: 4127)  // L4: conditional expression is constant                                                 -- Constant conditional expressions are frequently useful in templates.


#pragma warning (push)

	// Warnings that should be disabled temporarily
	#pragma warning (disable: 4365)  // L4: 'action' : conversion from 'type_1' to 'type_2', signed/unsigned mismatch
	#pragma warning (disable: 4986)  // L4: 'symbol': exception specification does not match previous declaration


	// Windows
	#define NOMINMAX
	#include <Windows.h>

	// STL
	#include <algorithm>
	#include <exception>
	#include <new>
	#include <string>
	#include <vector>

#pragma warning (pop)


// FlowSshC
#include "FlowSshC.h"


