template <typename T>
class TD;
int main() {
int i = 1;
int j = 1;
TD<decltype (1.0 * i / j)> td;
}
/home/maxim/Workspace/my/cdm/main.cpp: In function ‘int main()’:
/home/maxim/Workspace/my/cdm/main.cpp:61:32: error: aggregate ‘TD<double> a’ has incomplete type and cannot be defined
TD<decltype (1.0 * i / j)> a;
typedef float custom;
A::custom = int
B::custom = float
class I
{
public:
virtual void print() = 0;
};
class A : public I
{
public:
virtual void print() override
{
std::cout << num;
}
private:
int num = 1;
};
class B : public I
{
public:
virtual void print() override
{
std::cout << num;
}
private:
float num = 2.f;
};
template <typename T>
class A
{
public:
void print()
{
std::cout << val;
}
private:
T val;
};
#include <stdio.h>
#include <windows.h>
#define RTN_OK 0
#define RTN_FAILURE 1
const size_t expected_count = 1;
char* read_file_name(int argc, char** argv);
int main(int argc, char** argv)
{
// Parsing command line args
char* file_name = read_file_name(argc, argv);
// Opening our executable
FILE* portable_executable = fopen(file_name, "r");
// Reading dos header
IMAGE_DOS_HEADER dos_header_buffer;
fread(&dos_header_buffer, sizeof(IMAGE_DOS_HEADER), expected_count, portable_executable);
// Setting offset for reading PE header
fseek(portable_executable, (long)dos_header_buffer.e_lfanew, SEEK_SET)
// Reading signature field from PE header
DWORD signature = 0;
fread(&signature, sizeof(DWORD), expected_count, portable_executable);
// Reading file header
IMAGE_FILE_HEADER file_header_buffer;
fread(&file_header_buffer, sizeof(IMAGE_FILE_HEADER), expected_count, portable_executable);
// Reading optinal header
IMAGE_OPTIONAL_HEADER optional_header_buffer;
fread(&optional_header_buffer, file_header_buffer.SizeOfOptionalHeader, expected_count, portable_executable);
// Get info about all the sections
for (int i = 0; i < file_header_buffer.NumberOfSections; ++i)
{
// Reading each section header
IMAGE_SECTION_HEADER section_header_buffer;
fread(§ion_header_buffer, sizeof(IMAGE_SECTION_HEADER), expected_count, portable_executable);
printf("Section name: %7s, Raw data size: %10d, Pointer to raw data: %10d\n",
section_header_buffer.Name,
section_header_buffer.SizeOfRawData,
section_header_buffer.PointerToRawData);
}
fclose(portable_executable);
}
char* read_file_name(int argc, char** argv)
{
if (argc != 2)
{
return NULL;
}
return argv[1];
}