<commit_before>#pragma once

#include <functional>
#include <vector>
#include <map>

#include "debug.hpp"
#include "types.hpp"

namespace utki{

#if __cplusplus >= 201703L

template <typename C> class linq_collection_aggregator{
	template <typename CC> friend class linq_collection_aggregator;
	template <typename CC> friend linq_collection_aggregator<const CC&> linq(const CC&);
	template <typename CC> friend linq_collection_aggregator<const CC&> linq(CC&);
	template <typename CC> friend linq_collection_aggregator<CC&&> linq(CC&&);

	typename std::conditional<std::is_rvalue_reference<C>::value,
			typename std::remove_reference<C>::type,
			C
		>::type collection;
	
	typedef typename std::remove_reference<decltype(collection)>::type::value_type value_type;

	struct noncopyable_value_type : value_type{
		noncopyable_value_type(const noncopyable_value_type&) = delete;
		noncopyable_value_type& operator=(const noncopyable_value_type&) = delete;
	};<commit_msg>use M_CPP macro in linq<commit_after>#pragma once

#include <functional>
#include <vector>
#include <map>

#include "debug.hpp"
#include "types.hpp"
#include "config.hpp"

namespace utki{

#if M_CPP >= 17

template <typename C> class linq_collection_aggregator{
	template <typename CC> friend class linq_collection_aggregator;
	template <typename CC> friend linq_collection_aggregator<const CC&> linq(const CC&);
	template <typename CC> friend linq_collection_aggregator<const CC&> linq(CC&);
	template <typename CC> friend linq_collection_aggregator<CC&&> linq(CC&&);

	typename std::conditional<std::is_rvalue_reference<C>::value,
			typename std::remove_reference<C>::type,
			C
		>::type collection;
	
	typedef typename std::remove_reference<decltype(collection)>::type::value_type value_type;

	struct noncopyable_value_type : value_type{
		noncopyable_value_type(const noncopyable_value_type&) = delete;
		noncopyable_value_type& operator=(const noncopyable_value_type&) = delete;
	};
{'fraction_non_alphanumeric': 0.11230219499744767, 'fraction_numerical': 0.00408371618172537, 'mean_word_length': 7.990825688073395, 'pattern_counts': {'":': 0, '<': 33, '<?xml version=': 0, '>': 35, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '576024', 'n_tokens_mistral': 680, 'n_tokens_neox': 630, 'n_words': 146}